X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flibchdr%2Finclude%2Flibchdr%2Fcoretypes.h;h=805359b5ab92f8c924e10533a4e0c6cba719887c;hb=722c138352884b520a28363e62f4d5c09a361a5d;hp=30f892f6e24492e82f39a2b4fdc1eef9aaba2cc8;hpb=41ed0ee3ff0f83bf53b010e4d79ca1de5389e8f2;p=pcsx_rearmed.git diff --git a/deps/libchdr/include/libchdr/coretypes.h b/deps/libchdr/include/libchdr/coretypes.h index 30f892f6..805359b5 100644 --- a/deps/libchdr/include/libchdr/coretypes.h +++ b/deps/libchdr/include/libchdr/coretypes.h @@ -10,6 +10,15 @@ #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,29 +29,50 @@ typedef int32_t INT32; typedef int16_t INT16; typedef int8_t INT8; -#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 +typedef struct chd_core_file { + /* + * arbitrary pointer to data the implementation uses to implement the below functions + */ + void *argp; + + /* + * 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 UINT64 core_fsize(core_file *f) +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