r857 - in trunk: . platform
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Mar 20 14:33:56 EDT 2007
Author: icculus
Date: 2007-03-20 14:33:56 -0400 (Tue, 20 Mar 2007)
New Revision: 857
Modified:
trunk/physfs.c
trunk/physfs_internal.h
trunk/platform/beos.cpp
trunk/platform/os2.c
trunk/platform/pocketpc.c
trunk/platform/posix.c
trunk/platform/unix.c
trunk/platform/windows.c
Log:
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.
Modified: trunk/physfs.c
===================================================================
--- trunk/physfs.c 2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/physfs.c 2007-03-20 18:33:56 UTC (rev 857)
@@ -2029,14 +2029,40 @@
} /* 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 ... */
Modified: trunk/physfs_internal.h
===================================================================
--- trunk/physfs_internal.h 2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/physfs_internal.h 2007-03-20 18:33:56 UTC (rev 857)
@@ -1719,40 +1719,19 @@
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);
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a);
-/*
- * 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);
-
#ifdef __cplusplus
}
#endif
Modified: trunk/platform/beos.cpp
===================================================================
--- trunk/platform/beos.cpp 2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/beos.cpp 2007-03-20 18:33:56 UTC (rev 857)
@@ -240,6 +240,12 @@
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 ... */
Modified: trunk/platform/os2.c
===================================================================
--- trunk/platform/os2.c 2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/os2.c 2007-03-20 18:33:56 UTC (rev 857)
@@ -690,40 +690,12 @@
} /* __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 */
+ return(0); /* just use malloc() and friends. */
+} /* __PHYSFS_platformSetDefaultAllocator */
-
-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_OS2 */
/* end of os2.c ... */
Modified: trunk/platform/pocketpc.c
===================================================================
--- trunk/platform/pocketpc.c 2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/pocketpc.c 2007-03-20 18:33:56 UTC (rev 857)
@@ -576,40 +576,11 @@
/* !!! FIXME: Don't use C runtime for allocators? */
-int __PHYSFS_platformAllocatorInit(void)
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
{
- return(1); /* always succeeds. */
-} /* __PHYSFS_platformAllocatorInit */
+ return(0); /* just use malloc() and friends. */
+} /* __PHYSFS_platformSetDefaultAllocator */
-
-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_POCKETPC */
/* end of pocketpc.c ... */
Modified: trunk/platform/posix.c
===================================================================
--- trunk/platform/posix.c 2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/posix.c 2007-03-20 18:33:56 UTC (rev 857)
@@ -429,41 +429,6 @@
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 ... */
Modified: trunk/platform/unix.c
===================================================================
--- trunk/platform/unix.c 2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/unix.c 2007-03-20 18:33:56 UTC (rev 857)
@@ -471,6 +471,12 @@
} /* __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); }
Modified: trunk/platform/windows.c
===================================================================
--- trunk/platform/windows.c 2007-03-20 17:57:45 UTC (rev 856)
+++ trunk/platform/windows.c 2007-03-20 18:33:56 UTC (rev 857)
@@ -1051,40 +1051,11 @@
/* !!! FIXME: Don't use C runtime for allocators? */
-int __PHYSFS_platformAllocatorInit(void)
+int __PHYSFS_platformSetDefaultAllocator(PHYSFS_Allocator *a)
{
- return(1); /* always succeeds. */
-} /* __PHYSFS_platformAllocatorInit */
+ return(0); /* just use malloc() and friends. */
+} /* __PHYSFS_platformSetDefaultAllocator */
-
-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_WINDOWS */
/* end of windows.c ... */
More information about the physfs-commits
mailing list