diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-01-25 15:22:00 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-01-25 16:24:59 +0300 |
commit | 56808acbf7824832864fffc84ef05b00de5f2df6 (patch) | |
tree | c62eeab7f81b8ff185d07649869e09e4e7b056fe /src | |
parent | e15445f0f8f95f1547798b886b002146d282c006 (diff) | |
download | manaverse-56808acbf7824832864fffc84ef05b00de5f2df6.tar.gz manaverse-56808acbf7824832864fffc84ef05b00de5f2df6.tar.bz2 manaverse-56808acbf7824832864fffc84ef05b00de5f2df6.tar.xz manaverse-56808acbf7824832864fffc84ef05b00de5f2df6.zip |
Cleanup in physfsrwops to avoid different problems.
Diffstat (limited to 'src')
-rw-r--r-- | src/utils/physfsrwops.cpp | 87 | ||||
-rw-r--r-- | src/utils/physfsrwops.h | 26 |
2 files changed, 50 insertions, 63 deletions
diff --git a/src/utils/physfsrwops.cpp b/src/utils/physfsrwops.cpp index 1a5a71374..1960f0dee 100644 --- a/src/utils/physfsrwops.cpp +++ b/src/utils/physfsrwops.cpp @@ -18,21 +18,24 @@ * SDL falls under the LGPL license. You can get SDL at http://www.libsdl.org/ * * This file was written by Ryan C. Gordon. (icculus@icculus.org). + * + * Copyright (C) 2012 The ManaPlus Developers */ #include <stdio.h> /* used for SEEK_SET, SEEK_CUR, SEEK_END ... */ -#include "physfsrwops.h" +#include "utils/physfsrwops.h" + +#include "localconsts.h" static int physfsrwops_seek(SDL_RWops *rw, int offset, int whence) { - PHYSFS_File *handle = (PHYSFS_File *) rw->hidden.unknown.data1; + PHYSFS_file *handle = (PHYSFS_file *) rw->hidden.unknown.data1; int pos = 0; if (whence == SEEK_SET) { pos = offset; } /* if */ - else if (whence == SEEK_CUR) { PHYSFS_sint64 current = PHYSFS_tell(handle); @@ -40,66 +43,63 @@ static int physfsrwops_seek(SDL_RWops *rw, int offset, int whence) { SDL_SetError("Can't find position in file: %s", PHYSFS_getLastError()); - return(-1); + return -1; } /* if */ - pos = (int) current; - if ( ((PHYSFS_sint64) pos) != current ) + pos = (int)current; + if (((PHYSFS_sint64)pos) != current) { SDL_SetError("Can't fit current file position in an int!"); - return(-1); + return -1; } /* if */ if (offset == 0) /* this is a "tell" call. We're done. */ - return(pos); + return pos; pos += offset; } /* else if */ - else if (whence == SEEK_END) { PHYSFS_sint64 len = PHYSFS_fileLength(handle); if (len == -1) { SDL_SetError("Can't find end of file: %s", PHYSFS_getLastError()); - return(-1); + return -1; } /* if */ - pos = (int) len; - if ( ((PHYSFS_sint64) pos) != len ) + pos = (int)len; + if (((PHYSFS_sint64)pos) != len) { SDL_SetError("Can't fit end-of-file position in an int!"); - return(-1); + return -1; } /* if */ pos += offset; } /* else if */ - else { SDL_SetError("Invalid 'whence' parameter."); - return(-1); + return -1; } /* else */ if ( pos < 0 ) { SDL_SetError("Attempt to seek past start of file."); - return(-1); + return -1; } /* if */ if (!PHYSFS_seek(handle, (PHYSFS_uint64) pos)) { SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); - return(-1); + return -1; } /* if */ - return(pos); + return pos; } /* physfsrwops_seek */ - static int physfsrwops_read(SDL_RWops *rw, void *ptr, int size, int maxnum) { - PHYSFS_File *handle = (PHYSFS_File *) rw->hidden.unknown.data1; + PHYSFS_file *handle = (PHYSFS_file*)rw->hidden.unknown.data1; PHYSFS_sint64 rc = PHYSFS_read(handle, ptr, size, maxnum); if (rc != maxnum) { @@ -107,45 +107,44 @@ static int physfsrwops_read(SDL_RWops *rw, void *ptr, int size, int maxnum) SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); } /* if */ - return((int) 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; + PHYSFS_file *handle = (PHYSFS_file*)rw->hidden.unknown.data1; PHYSFS_sint64 rc = PHYSFS_write(handle, ptr, size, num); if (rc != num) SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); - return((int) rc); + return (int) rc; } /* physfsrwops_write */ - static int physfsrwops_close(SDL_RWops *rw) { - PHYSFS_File *handle = (PHYSFS_File *) rw->hidden.unknown.data1; + PHYSFS_file *handle = (PHYSFS_file*)rw->hidden.unknown.data1; if (!PHYSFS_close(handle)) { SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); - return(-1); + return -1; } /* if */ SDL_FreeRW(rw); - return(0); + return 0; } /* physfsrwops_close */ - -static SDL_RWops *create_rwops(PHYSFS_File *handle) +static SDL_RWops *create_rwops(PHYSFS_file *handle) { - SDL_RWops *retval = NULL; + SDL_RWops *retval = nullptr; - if (handle == NULL) + if (!handle) + { SDL_SetError("PhysicsFS error: %s", PHYSFS_getLastError()); + } else { retval = SDL_AllocRW(); - if (retval != NULL) + if (retval) { retval->seek = physfsrwops_seek; retval->read = physfsrwops_read; @@ -155,39 +154,33 @@ static SDL_RWops *create_rwops(PHYSFS_File *handle) } /* if */ } /* else */ - return(retval); + return retval; } /* create_rwops */ - -SDL_RWops *PHYSFSRWOPS_makeRWops(PHYSFS_File *handle) +SDL_RWops *PHYSFSRWOPS_makeRWops(PHYSFS_file *handle) { - SDL_RWops *retval = NULL; - if (handle == NULL) + SDL_RWops *retval = nullptr; + if (!handle) SDL_SetError("NULL pointer passed to PHYSFSRWOPS_makeRWops()."); else retval = create_rwops(handle); - return(retval); + return retval; } /* PHYSFSRWOPS_makeRWops */ - SDL_RWops *PHYSFSRWOPS_openRead(const char *fname) { - return(create_rwops(PHYSFS_openRead(fname))); + return create_rwops(PHYSFS_openRead(fname)); } /* PHYSFSRWOPS_openRead */ - SDL_RWops *PHYSFSRWOPS_openWrite(const char *fname) { - return(create_rwops(PHYSFS_openWrite(fname))); + return create_rwops(PHYSFS_openWrite(fname)); } /* PHYSFSRWOPS_openWrite */ - SDL_RWops *PHYSFSRWOPS_openAppend(const char *fname) { - return(create_rwops(PHYSFS_openAppend(fname))); + return create_rwops(PHYSFS_openAppend(fname)); } /* PHYSFSRWOPS_openAppend */ - /* end of physfsrwops.c ... */ - diff --git a/src/utils/physfsrwops.h b/src/utils/physfsrwops.h index 406fba6f6..efa004ac6 100644 --- a/src/utils/physfsrwops.h +++ b/src/utils/physfsrwops.h @@ -18,17 +18,15 @@ * SDL falls under the LGPL license. You can get SDL at http://www.libsdl.org/ * * This file was written by Ryan C. Gordon. (icculus@icculus.org). + * + * Copyright (C) 2012 The ManaPlus Developers */ -#ifndef _INCLUDE_PHYSFSRWOPS_H_ -#define _INCLUDE_PHYSFSRWOPS_H_ - -#include "physfs.h" -#include "SDL.h" +#ifndef UTILS_PHYSFSRWOPS_H +#define UTILS_PHYSFSRWOPS_H -#ifdef __cplusplus -extern "C" { -#endif +#include <physfs.h> +#include <SDL.h> /** * Open a platform-independent filename for reading, and make it accessible @@ -40,7 +38,7 @@ extern "C" { * @return A valid SDL_RWops structure on success, NULL on error. Specifics * of the error can be gleaned from PHYSFS_getLastError(). */ -__EXPORT__ SDL_RWops *PHYSFSRWOPS_openRead(const char *fname); +SDL_RWops *PHYSFSRWOPS_openRead(const char *fname); /** * Open a platform-independent filename for writing, and make it accessible @@ -52,7 +50,7 @@ __EXPORT__ SDL_RWops *PHYSFSRWOPS_openRead(const char *fname); * @return A valid SDL_RWops structure on success, NULL on error. Specifics * of the error can be gleaned from PHYSFS_getLastError(). */ -__EXPORT__ SDL_RWops *PHYSFSRWOPS_openWrite(const char *fname); +SDL_RWops *PHYSFSRWOPS_openWrite(const char *fname); /** * Open a platform-independent filename for appending, and make it accessible @@ -64,7 +62,7 @@ __EXPORT__ SDL_RWops *PHYSFSRWOPS_openWrite(const char *fname); * @return A valid SDL_RWops structure on success, NULL on error. Specifics * of the error can be gleaned from PHYSFS_getLastError(). */ -__EXPORT__ SDL_RWops *PHYSFSRWOPS_openAppend(const char *fname); +SDL_RWops *PHYSFSRWOPS_openAppend(const char *fname); /** * Make a SDL_RWops from an existing PhysicsFS file handle. You should @@ -76,11 +74,7 @@ __EXPORT__ SDL_RWops *PHYSFSRWOPS_openAppend(const char *fname); * @return A valid SDL_RWops structure on success, NULL on error. Specifics * of the error can be gleaned from PHYSFS_getLastError(). */ -__EXPORT__ SDL_RWops *PHYSFSRWOPS_makeRWops(PHYSFS_File *handle); - -#ifdef __cplusplus -} -#endif +SDL_RWops *PHYSFSRWOPS_makeRWops(PHYSFS_file *handle); #endif /* include-once blocker */ |