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=99ef322f72fc6f8e11be8f94edd4ef7506957d4f;hpb=9abd586c96e8a2e37e92b620c70668a57d6f89f7;p=pcsx_rearmed.git diff --git a/deps/libchdr/include/libchdr/coretypes.h b/deps/libchdr/include/libchdr/coretypes.h index 99ef322f..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,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