diff -r 8fd36e1b66ed -r fcea0f51d94f misc/libphyslayer/physfsrwops.c --- a/misc/libphyslayer/physfsrwops.c Sat Feb 05 10:42:50 2022 -0500 +++ b/misc/libphyslayer/physfsrwops.c Tue Sep 06 22:08:27 2022 +0300 @@ -16,7 +16,7 @@ * Please see LICENSE.txt in the root of the source tree. * * SDL 1.2 falls under the LGPL license. SDL 1.3+ is zlib, like PhysicsFS. - * You can get SDL at http://www.libsdl.org/ + * You can get SDL at https://www.libsdl.org/ * * This file was written by Ryan C. Gordon. (icculus@icculus.org). */ @@ -24,22 +24,35 @@ #include /* used for SEEK_SET, SEEK_CUR, SEEK_END ... */ #include "physfsrwops.h" -/* SDL's RWOPS interface changed a little in SDL 1.3... */ +/* SDL's RWOPS interface changed a little in SDL 2.0... */ #if defined(SDL_VERSION_ATLEAST) -#if SDL_VERSION_ATLEAST(1, 3, 0) -#define TARGET_SDL13 1 +#if SDL_VERSION_ATLEAST(2, 0, 0) +#define TARGET_SDL2 1 #endif #endif -#if TARGET_SDL13 +#if !TARGET_SDL2 +#ifndef RW_SEEK_SET +#define RW_SEEK_SET SEEK_SET +#endif +#ifndef RW_SEEK_CUR +#define RW_SEEK_CUR SEEK_CUR +#endif +#ifndef RW_SEEK_END +#define RW_SEEK_END SEEK_END +#endif +#endif + +#if TARGET_SDL2 static Sint64 SDLCALL physfsrwops_size(struct SDL_RWops *rw) { PHYSFS_File *handle = (PHYSFS_File *) rw->hidden.unknown.data1; - return PHYSFS_fileLength(handle); -} + return (Sint64) PHYSFS_fileLength(handle); +} /* physfsrwops_size */ #endif -#if TARGET_SDL13 + +#if TARGET_SDL2 static Sint64 SDLCALL physfsrwops_seek(struct SDL_RWops *rw, Sint64 offset, int whence) #else static int physfsrwops_seek(SDL_RWops *rw, int offset, int whence) @@ -48,9 +61,10 @@ PHYSFS_File *handle = (PHYSFS_File *) rw->hidden.unknown.data1; PHYSFS_sint64 pos = 0; - if (whence == SEEK_SET) + if (whence == RW_SEEK_SET) pos = (PHYSFS_sint64) offset; - else if (whence == SEEK_CUR) + + else if (whence == RW_SEEK_CUR) { const PHYSFS_sint64 current = PHYSFS_tell(handle); if (current == -1) @@ -62,8 +76,8 @@ if (offset == 0) /* this is a "tell" call. We're done. */ { - #if TARGET_SDL13 - return (long) current; + #if TARGET_SDL2 + return (Sint64) current; #else return (int) current; #endif @@ -72,7 +86,7 @@ pos = current + ((PHYSFS_sint64) offset); } /* else if */ - else if (whence == SEEK_END) + else if (whence == RW_SEEK_END) { const PHYSFS_sint64 len = PHYSFS_fileLength(handle); if (len == -1) @@ -95,22 +109,22 @@ SDL_SetError("Attempt to seek past start of file."); return -1; } /* if */ - + if (!PHYSFS_seek(handle, (PHYSFS_uint64) pos)) { SDL_SetError("PhysicsFS error: %s", PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())); return -1; } /* if */ - #if TARGET_SDL13 - return (long) pos; + #if TARGET_SDL2 + return (Sint64) pos; #else return (int) pos; #endif } /* physfsrwops_seek */ -#if TARGET_SDL13 +#if TARGET_SDL2 static size_t SDLCALL physfsrwops_read(struct SDL_RWops *rw, void *ptr, size_t size, size_t maxnum) #else @@ -123,18 +137,26 @@ if (rc != ((PHYSFS_sint64) readlen)) { if (!PHYSFS_eof(handle)) /* not EOF? Must be an error. */ + { SDL_SetError("PhysicsFS error: %s", PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())); + + #if TARGET_SDL2 + return 0; + #else + return -1; + #endif + } /* if */ } /* if */ - #if TARGET_SDL13 - return (size_t) rc; + #if TARGET_SDL2 + return (size_t) rc / size; #else - return (int) rc; + return (int) rc / size; #endif } /* physfsrwops_read */ -#if TARGET_SDL13 +#if TARGET_SDL2 static size_t SDLCALL physfsrwops_write(struct SDL_RWops *rw, const void *ptr, size_t size, size_t num) #else @@ -147,7 +169,7 @@ if (rc != ((PHYSFS_sint64) writelen)) SDL_SetError("PhysicsFS error: %s", PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())); - #if TARGET_SDL13 + #if TARGET_SDL2 return (size_t) rc; #else return (int) rc; @@ -180,9 +202,9 @@ retval = SDL_AllocRW(); if (retval != NULL) { -#if TARGET_SDL13 && !defined(EMSCRIPTEN) + #if TARGET_SDL2 retval->size = physfsrwops_size; -#endif + #endif retval->seek = physfsrwops_seek; retval->read = physfsrwops_read; retval->write = physfsrwops_write;