update libchdr
[pcsx_rearmed.git] / deps / libchdr / include / libchdr / coretypes.h
index 99ef322..805359b 100644 (file)
 
 #define ARRAY_LENGTH(x) (sizeof(x)/sizeof(x[0]))
 
+#if defined(__PS3__) || defined(__PSL1GHT__)
+#undef UINT32
+#undef UINT16
+#undef UINT8
+#undef INT32
+#undef INT16
+#undef INT8
+#endif
+
 typedef uint64_t UINT64;
 typedef uint32_t UINT32;
 typedef uint16_t UINT16;
@@ -20,41 +29,50 @@ typedef int32_t INT32;
 typedef int16_t INT16;
 typedef int8_t INT8;
 
-#ifdef USE_LIBRETRO_VFS
-#define core_file RFILE
-#define core_fopen(file) rfopen(file, "rb")
-#define core_fseek rfseek
-#define core_ftell rftell
-#define core_fread(fc, buff, len) rfread(buff, 1, len, fc)
-#define core_fclose rfclose
-#else
-#define core_file FILE
-#define core_fopen(file) fopen(file, "rb")
-#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WIN64__)
-       #define core_fseek _fseeki64
-       #define core_ftell _ftelli64
-#elif defined(_LARGEFILE_SOURCE) && defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
-       #define core_fseek fseeko64
-       #define core_ftell ftello64
-#else
-       #define core_fseek fseeko
-       #define core_ftell ftello
-#endif
-#define core_fread(fc, buff, len) fread(buff, 1, len, fc)
-#define core_fclose fclose
-#endif
+typedef struct chd_core_file {
+       /*
+        * arbitrary pointer to data the implementation uses to implement the below functions
+        */
+       void *argp;
 
-#ifdef __GNUC__
-__attribute__ ((unused))
-#endif
-static UINT64 core_fsize(core_file *f)
+       /*
+        * 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)
 {
-    UINT64 rv;
-    UINT64 p = core_ftell(f);
-    core_fseek(f, 0, SEEK_END);
-    rv = core_ftell(f);
-    core_fseek(f, p, SEEK_SET);
-    return rv;
+       return fp->fsize(fp);
 }
 
 #endif