diff -r 69b093825303 -r b53fa5093749 extras/physfsrwops.c --- a/extras/physfsrwops.c Sun Mar 24 19:42:21 2002 +0000 +++ b/extras/physfsrwops.c Sun Mar 24 19:47:33 2002 +0000 @@ -34,7 +34,7 @@ else if (whence == SEEK_CUR) { - int current = PHYSFS_tell(handle); + PHYSFS_sint64 current = PHYSFS_tell(handle); if (current == -1) { SDL_SetError("Can't find position in file: %s", @@ -42,22 +42,36 @@ return(-1); } /* if */ + pos = (int) current; + if ( ((PHYSFS_sint64) pos) != current ) + { + SDL_SetError("Can't fit current file position in an int!"); + return(-1); + } /* if */ + if (offset == 0) /* this is a "tell" call. We're done. */ - return(offset); + return(pos); - pos = current + offset; + pos += offset; } /* else if */ else if (whence == SEEK_END) { - int len = PHYSFS_fileLength(handle); + PHYSFS_sint64 len = PHYSFS_fileLength(handle); if (len == -1) { SDL_SetError("Can't find end of file: %s", PHYSFS_getLastError()); return(-1); } /* if */ - pos = len + offset; + pos = (int) len; + if ( ((PHYSFS_sint64) pos) != len ) + { + SDL_SetError("Can't fit end-of-file position in an int!"); + return(-1); + } /* if */ + + pos += offset; } /* else if */ else @@ -66,7 +80,13 @@ return(-1); } /* else */ - if (!PHYSFS_seek(handle, pos)) + if ( pos < 0 ) + { + 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_getLastError()); return(-1); @@ -79,25 +99,25 @@ static int physfsrwops_read(SDL_RWops *rw, void *ptr, int size, int maxnum) { PHYSFS_file *handle = (PHYSFS_file *) rw->hidden.unknown.data1; - int rc = PHYSFS_read(handle, ptr, size, maxnum); + PHYSFS_sint64 rc = PHYSFS_read(handle, ptr, size, maxnum); if (rc != maxnum) { if (!PHYSFS_eof(handle)) /* not EOF? Must be an error. */ SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); } /* if */ - return(rc); + return((int) rc); } /* physfsrwops_read */ static int physfsrwops_write(SDL_RWops *rw, const void *ptr, int size, int num) { PHYSFS_file *handle = (PHYSFS_file *) rw->hidden.unknown.data1; - int rc = PHYSFS_write(handle, ptr, size, num); + PHYSFS_sint64 rc = PHYSFS_write(handle, ptr, size, num); if (rc != num) SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); - return(rc); + return((int) rc); } /* physfsrwops_write */