From 67746179d320da0a3338869b6d6022c1f2ff0ee7 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Fri, 9 Sep 2005 14:07:43 +0000 Subject: [PATCH] Some tweaks to PHYSFS_Allocator. --- CHANGELOG | 1 + physfs.c | 8 +++++--- physfs.h | 16 ++++++++-------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 823293bf..f94cf0ad 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ * CHANGELOG. */ +09092005 - Some tweaks to PHYSFS_Allocator. 09062005 - Happy September. Changed the allocation abstraction to use PHYSFS_uint64 instead of size_t, so we don't have to include system headers inside physfs.h. Minor MingW fixes (but it's still diff --git a/physfs.c b/physfs.c index f1f7d04a..93156a96 100644 --- a/physfs.c +++ b/physfs.c @@ -777,7 +777,8 @@ int PHYSFS_init(const char *argv0) if (!externalAllocator) setDefaultAllocator(); - BAIL_IF_MACRO(!allocator.Init(), NULL, 0); + if (allocator.Init != NULL) + BAIL_IF_MACRO(!allocator.Init(), NULL, 0); BAIL_IF_MACRO(!__PHYSFS_platformInit(), NULL, 0); @@ -889,7 +890,8 @@ int PHYSFS_deinit(void) __PHYSFS_platformDestroyMutex(errorLock); __PHYSFS_platformDestroyMutex(stateLock); - allocator.Deinit(); + if (allocator.Deinit != NULL) + allocator.Deinit(); errorLock = stateLock = NULL; return(1); @@ -2047,7 +2049,7 @@ int PHYSFS_flush(PHYSFS_File *handle) } /* PHYSFS_flush */ -int PHYSFS_setAllocator(PHYSFS_Allocator *a) +int PHYSFS_setAllocator(const PHYSFS_Allocator *a) { BAIL_IF_MACRO(initialized, ERR_IS_INITIALIZED, 0); externalAllocator = (a != NULL); diff --git a/physfs.h b/physfs.h index 8557f1fe..4d9ee454 100644 --- a/physfs.h +++ b/physfs.h @@ -1847,7 +1847,7 @@ __EXPORT__ int PHYSFS_writeUBE64(PHYSFS_File *file, PHYSFS_uint64 val); /* Everything above this line is part of the PhysicsFS 1.0 API. */ /** - * \struct PHYSFS_allocator + * \struct PHYSFS_Allocator * \brief PhysicsFS allocation function pointers. * * (This is for limited, hardcore use. If you don't immediately see a need @@ -1868,16 +1868,16 @@ __EXPORT__ int PHYSFS_writeUBE64(PHYSFS_File *file, PHYSFS_uint64 val); */ typedef struct { - int (*Init)(void); - void (*Deinit)(void); - void *(*Malloc)(PHYSFS_uint64); - void *(*Realloc)(void *, PHYSFS_uint64); - void (*Free)(void *); + int (*Init)(void); /**< Initialize. Can be NULL. Zero on failure. */ + void (*Deinit)(void); /**< Deinitialize your allocator. Can be NULL. */ + void *(*Malloc)(PHYSFS_uint64); /**< Allocate like malloc(). */ + void *(*Realloc)(void *, PHYSFS_uint64); /**< Reallocate like realloc(). */ + void (*Free)(void *); /**< Free memory from Malloc or Realloc. */ } PHYSFS_Allocator; /** - * \fn int PHYSFS_setAllocator(PHYSFS_Allocator *allocator) + * \fn int PHYSFS_setAllocator(const PHYSFS_Allocator *allocator) * \brief Hook your own allocation routines into PhysicsFS. * * (This is for limited, hardcore use. If you don't immediately see a need @@ -1903,7 +1903,7 @@ typedef struct * \return zero on failure, non-zero on success. This call only fails * when used between PHYSFS_init() and PHYSFS_deinit() calls. */ -__EXPORT__ int PHYSFS_setAllocator(PHYSFS_Allocator *allocator); +__EXPORT__ int PHYSFS_setAllocator(const PHYSFS_Allocator *allocator); /**