Since all the platform layers were using the same cut-and-paste of the

malloc/realloc/free allocator, I moved it into physfs.c as a default, which
 is used if the platform layer doesn't offer a platform-specific default
 allocator, which none do at this point, but will soon.
This commit is contained in:
Ryan C. Gordon 2007-03-20 18:33:56 +00:00
parent bb1d757244
commit 857d9bc84d
8 changed files with 63 additions and 167 deletions

View File

@ -2029,14 +2029,40 @@ int PHYSFS_setAllocator(const PHYSFS_Allocator *a)
} /* PHYSFS_setAllocator */
static void *mallocAllocatorMalloc(PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef malloc
return(malloc((size_t) s));
} /* mallocAllocatorMalloc */
static void *mallocAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef realloc
return(realloc(ptr, (size_t) s));
} /* mallocAllocatorRealloc */
static void mallocAllocatorFree(void *ptr)
{
#undef free
free(ptr);
} /* mallocAllocatorFree */
static void setDefaultAllocator(void)
{
assert(!externalAllocator);
allocator.Init = __PHYSFS_platformAllocatorInit;
allocator.Deinit = __PHYSFS_platformAllocatorDeinit;
allocator.Malloc = __PHYSFS_platformAllocatorMalloc;
allocator.Realloc = __PHYSFS_platformAllocatorRealloc;
allocator.Free = __PHYSFS_platformAllocatorFree;
if (!__PHYSFS_platformSetDefaultAllocator(&allocator))
{
allocator.Init = NULL;
allocator.Deinit = NULL;
allocator.Malloc = mallocAllocatorMalloc;
allocator.Realloc = mallocAllocatorRealloc;
allocator.Free = mallocAllocatorFree;
} /* if */
} /* setDefaultAllocator */
/* end of physfs.c ... */

View File

@ -1719,39 +1719,18 @@ int __PHYSFS_platformGrabMutex(void *mutex);
void __PHYSFS_platformReleaseMutex(void *mutex);
/*
* Called during PHYSFS_init() to initialize the allocator, if the user
* Called at the start of PHYSFS_init() to prepare the allocator, if the user
* hasn't selected their own allocator via PHYSFS_setAllocator().
* Return zero on initialization error (which will make PHYSFS_init() fail,
* too), non-zero on success.
* If the platform has a custom allocator, it should fill in the fields of
* (a) with the proper function pointers and return non-zero.
* If the platform just wants to use malloc()/free()/etc, return zero
* immediately and the higher level will handle it. The Init and Deinit
* fields of (a) are optional...set them to NULL if you don't need them.
* Everything else must be implemented. All rules follow those for
* PHYSFS_setAllocator(). If Init isn't NULL, it will be called shortly
* after this function returns non-zero.
*/
int __PHYSFS_platformAllocatorInit(void);
/*
* Called during PHYSFS_deinit() to deinitialize the allocator, if the user
* hasn't selected their own allocator via PHYSFS_setAllocator().
*/
void __PHYSFS_platformAllocatorDeinit(void);
/*
* Implement malloc. It's safe to just pass through from the C runtime.
* This is used for allocation if the user hasn't selected their own
* allocator via PHYSFS_setAllocator().
*/
void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s);
/*
* Implement realloc. It's safe to just pass through from the C runtime.
* This is used for allocation if the user hasn't selected their own
* allocator via PHYSFS_setAllocator().
*/
void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s);
/*
* Implement free. It's safe to just pass through from the C runtime.
* This is used for deallocation if the user hasn't selected their own
* allocator via PHYSFS_setAllocator().
*/
void __PHYSFS_platformAllocatorFree(void *ptr);
int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a);
#ifdef __cplusplus
}

View File

@ -240,6 +240,12 @@ void __PHYSFS_platformReleaseMutex(void *mutex)
release_sem(*((sem_id *) mutex));
} /* __PHYSFS_platformReleaseMutex */
int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
{
return(0); /* just use malloc() and friends. */
} /* __PHYSFS_platformSetDefaultAllocator */
#endif /* PHYSFS_PLATFORM_BEOS */
/* end of beos.cpp ... */

View File

@ -690,39 +690,11 @@ void __PHYSFS_platformReleaseMutex(void *mutex)
} /* __PHYSFS_platformReleaseMutex */
int __PHYSFS_platformAllocatorInit(void)
/* !!! FIXME: Don't use C runtime for allocators? */
int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
{
return(1); /* always succeeds. */
} /* __PHYSFS_platformAllocatorInit */
void __PHYSFS_platformAllocatorDeinit(void)
{
/* no-op */
} /* __PHYSFS_platformAllocatorInit */
void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef malloc
return(malloc((size_t) s));
} /* __PHYSFS_platformMalloc */
void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef realloc
return(realloc(ptr, (size_t) s));
} /* __PHYSFS_platformRealloc */
void __PHYSFS_platformAllocatorFree(void *ptr)
{
#undef free
free(ptr);
} /* __PHYSFS_platformAllocatorFree */
return(0); /* just use malloc() and friends. */
} /* __PHYSFS_platformSetDefaultAllocator */
#endif /* PHYSFS_PLATFORM_OS2 */

View File

@ -576,39 +576,10 @@ PHYSFS_sint64 __PHYSFS_platformGetLastModTime(const char *fname)
/* !!! FIXME: Don't use C runtime for allocators? */
int __PHYSFS_platformAllocatorInit(void)
int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
{
return(1); /* always succeeds. */
} /* __PHYSFS_platformAllocatorInit */
void __PHYSFS_platformAllocatorDeinit(void)
{
/* no-op */
} /* __PHYSFS_platformAllocatorInit */
void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef malloc
return(malloc((size_t) s));
} /* __PHYSFS_platformMalloc */
void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef realloc
return(realloc(ptr, (size_t) s));
} /* __PHYSFS_platformRealloc */
void __PHYSFS_platformAllocatorFree(void *ptr)
{
#undef free
free(ptr);
} /* __PHYSFS_platformAllocatorFree */
return(0); /* just use malloc() and friends. */
} /* __PHYSFS_platformSetDefaultAllocator */
#endif /* PHYSFS_PLATFORM_POCKETPC */

View File

@ -429,41 +429,6 @@ PHYSFS_sint64 __PHYSFS_platformGetLastModTime(const char *fname)
return statbuf.st_mtime;
} /* __PHYSFS_platformGetLastModTime */
int __PHYSFS_platformAllocatorInit(void)
{
return(1); /* always succeeds. */
} /* __PHYSFS_platformAllocatorInit */
void __PHYSFS_platformAllocatorDeinit(void)
{
/* no-op */
} /* __PHYSFS_platformAllocatorInit */
void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef malloc
return(malloc((size_t) s));
} /* __PHYSFS_platformMalloc */
void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef realloc
return(realloc(ptr, (size_t) s));
} /* __PHYSFS_platformRealloc */
void __PHYSFS_platformAllocatorFree(void *ptr)
{
#undef free
free(ptr);
} /* __PHYSFS_platformAllocatorFree */
#endif /* PHYSFS_PLATFORM_POSIX */
/* end of posix.c ... */

View File

@ -471,6 +471,12 @@ char *__PHYSFS_platformRealPath(const char *path)
} /* __PHYSFS_platformRealPath */
int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
{
return(0); /* just use malloc() and friends. */
} /* __PHYSFS_platformSetDefaultAllocator */
#if (defined PHYSFS_NO_PTHREADS_SUPPORT)
PHYSFS_uint64 __PHYSFS_platformGetThreadID(void) { return(0x0001); }

View File

@ -1051,39 +1051,10 @@ PHYSFS_sint64 __PHYSFS_platformGetLastModTime(const char *fname)
/* !!! FIXME: Don't use C runtime for allocators? */
int __PHYSFS_platformAllocatorInit(void)
int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
{
return(1); /* always succeeds. */
} /* __PHYSFS_platformAllocatorInit */
void __PHYSFS_platformAllocatorDeinit(void)
{
/* no-op */
} /* __PHYSFS_platformAllocatorInit */
void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef malloc
return(malloc((size_t) s));
} /* __PHYSFS_platformMalloc */
void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s)
{
BAIL_IF_MACRO(__PHYSFS_ui64FitsAddressSpace(s), ERR_OUT_OF_MEMORY, NULL);
#undef realloc
return(realloc(ptr, (size_t) s));
} /* __PHYSFS_platformRealloc */
void __PHYSFS_platformAllocatorFree(void *ptr)
{
#undef free
free(ptr);
} /* __PHYSFS_platformAllocatorFree */
return(0); /* just use malloc() and friends. */
} /* __PHYSFS_platformSetDefaultAllocator */
#endif /* PHYSFS_PLATFORM_WINDOWS */