+ /*
+ * return the size of a given file as a 64-bit unsigned integer.
+ * the position of the file pointer after calling this function is
+ * undefined because many implementations will seek to the end of the
+ * file and call ftell.
+ *
+ * on error, (UINT64)-1 is returned.
+ */
+ UINT64(*fsize)(struct chd_core_file*);
+
+ /*
+ * should match the behavior of fread, except the FILE* argument at the end
+ * will be replaced with a struct chd_core_file*.
+ */
+ size_t(*fread)(void*,size_t,size_t,struct chd_core_file*);
+
+ // closes the given file.
+ int (*fclose)(struct chd_core_file*);
+
+ // fseek clone
+ int (*fseek)(struct chd_core_file*, INT64, int);
+} core_file;
+
+static inline int core_fclose(core_file *fp) {
+ return fp->fclose(fp);
+}
+
+static inline size_t core_fread(core_file *fp, void *ptr, size_t len) {
+ return fp->fread(ptr, 1, len, fp);
+}
+
+static inline int core_fseek(core_file* fp, INT64 offset, int whence) {
+ return fp->fseek(fp, offset, whence);
+}
+
+static inline UINT64 core_fsize(core_file *fp)