Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
icculus committed Mar 20, 2007
1 parent bb1d757 commit 857d9bc
Show file tree
Hide file tree
Showing 8 changed files with 63 additions and 167 deletions.
36 changes: 31 additions & 5 deletions physfs.c
Expand Up @@ -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 ... */
Expand Down
41 changes: 10 additions & 31 deletions physfs_internal.h
Expand Up @@ -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
}
Expand Down
6 changes: 6 additions & 0 deletions platform/beos.cpp
Expand Up @@ -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 ... */
Expand Down
36 changes: 4 additions & 32 deletions platform/os2.c
Expand Up @@ -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 */

Expand Down
35 changes: 3 additions & 32 deletions platform/pocketpc.c
Expand Up @@ -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 */

Expand Down
35 changes: 0 additions & 35 deletions platform/posix.c
Expand Up @@ -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 ... */
Expand Down
6 changes: 6 additions & 0 deletions platform/unix.c
Expand Up @@ -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); }
Expand Down
35 changes: 3 additions & 32 deletions platform/windows.c
Expand Up @@ -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 */

Expand Down

0 comments on commit 857d9bc

Please sign in to comment.