diff --git a/CHANGELOG b/CHANGELOG index 9727820..f6609a2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,9 @@ * CHANGELOG. */ +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. 08202005 - Fixed bug in verifyPath() that was breaking PHYSFS_setSaneConfig() and other corner cases. 07242005 - Patched to compile on BeOS. diff --git a/physfs.h b/physfs.h index c6b51cd..8557f1f 100644 --- a/physfs.h +++ b/physfs.h @@ -1857,14 +1857,21 @@ __EXPORT__ int PHYSFS_writeUBE64(PHYSFS_File *file, PHYSFS_uint64 val); * Allocators are assumed to be reentrant by the caller; please mutex * accordingly. * + * Allocations are always discussed in 64-bits, for future expansion...we're + * on the cusp of a 64-bit transition, and we'll probably be allocating 6 + * gigabytes like it's nothing sooner or later, and I don't want to change + * this again at that point. If you're on a 32-bit platform and have to + * downcast, it's okay to return NULL if the allocation is greater than + * 4 gigabytes, since you'd have to do so anyhow. + * * \sa PHYSFS_setAllocator */ typedef struct { int (*Init)(void); void (*Deinit)(void); - void *(*Malloc)(size_t); - void *(*Realloc)(void *, size_t); + void *(*Malloc)(PHYSFS_uint64); + void *(*Realloc)(void *, PHYSFS_uint64); void (*Free)(void *); } PHYSFS_Allocator; diff --git a/physfs_internal.h b/physfs_internal.h index 41e1224..dc70205 100644 --- a/physfs_internal.h +++ b/physfs_internal.h @@ -1682,14 +1682,14 @@ void __PHYSFS_platformAllocatorDeinit(void); * This is used for allocation if the user hasn't selected their own * allocator via PHYSFS_setAllocator(). */ -void *__PHYSFS_platformAllocatorMalloc(size_t s); +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, size_t s); +void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s); /* * Implement free. It's safe to just pass through from the C runtime. diff --git a/platform/macclassic.c b/platform/macclassic.c index f1841a9..3470805 100644 --- a/platform/macclassic.c +++ b/platform/macclassic.c @@ -939,17 +939,23 @@ void __PHYSFS_platformAllocatorDeinit(void) } /* __PHYSFS_platformAllocatorInit */ -void *__PHYSFS_platformAllocatorMalloc(size_t s) +void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef malloc - return(malloc(s)); + return(malloc((size_t) s)); } /* __PHYSFS_platformMalloc */ -void *__PHYSFS_platformAllocatorRealloc(void *ptr, size_t s) +void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef realloc - return(realloc(ptr, s)); + return(realloc(ptr, (size_t) s)); } /* __PHYSFS_platformRealloc */ diff --git a/platform/os2.c b/platform/os2.c index 31d9f11..58f635a 100644 --- a/platform/os2.c +++ b/platform/os2.c @@ -754,17 +754,23 @@ void __PHYSFS_platformAllocatorDeinit(void) } /* __PHYSFS_platformAllocatorInit */ -void *__PHYSFS_platformAllocatorMalloc(size_t s) +void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef malloc - return(malloc(s)); + return(malloc((size_t) s)); } /* __PHYSFS_platformMalloc */ -void *__PHYSFS_platformAllocatorRealloc(void *ptr, size_t s) +void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef realloc - return(realloc(ptr, s)); + return(realloc(ptr, (size_t) s)); } /* __PHYSFS_platformRealloc */ diff --git a/platform/pocketpc.c b/platform/pocketpc.c index f5b7cf1..0284ab0 100644 --- a/platform/pocketpc.c +++ b/platform/pocketpc.c @@ -672,17 +672,23 @@ void __PHYSFS_platformAllocatorDeinit(void) } /* __PHYSFS_platformAllocatorInit */ -void *__PHYSFS_platformAllocatorMalloc(size_t s) +void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef malloc - return(malloc(s)); + return(malloc((size_t) s)); } /* __PHYSFS_platformMalloc */ -void *__PHYSFS_platformAllocatorRealloc(void *ptr, size_t s) +void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef realloc - return(realloc(ptr, s)); + return(realloc(ptr, (size_t) s)); } /* __PHYSFS_platformRealloc */ diff --git a/platform/posix.c b/platform/posix.c index 9e4a6dc..dc9cbad 100644 --- a/platform/posix.c +++ b/platform/posix.c @@ -514,17 +514,23 @@ void __PHYSFS_platformAllocatorDeinit(void) } /* __PHYSFS_platformAllocatorInit */ -void *__PHYSFS_platformAllocatorMalloc(size_t s) +void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef malloc - return(malloc(s)); + return(malloc((size_t) s)); } /* __PHYSFS_platformMalloc */ -void *__PHYSFS_platformAllocatorRealloc(void *ptr, size_t s) +void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef realloc - return(realloc(ptr, s)); + return(realloc(ptr, (size_t) s)); } /* __PHYSFS_platformRealloc */ diff --git a/platform/skeleton.c b/platform/skeleton.c index 7aaab69..372aa35 100644 --- a/platform/skeleton.c +++ b/platform/skeleton.c @@ -246,17 +246,23 @@ void __PHYSFS_platformAllocatorDeinit(void) } /* __PHYSFS_platformAllocatorInit */ -void *__PHYSFS_platformAllocatorMalloc(size_t s) +void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef malloc - return(malloc(s)); + return(malloc((size_t) s)); } /* __PHYSFS_platformMalloc */ -void *__PHYSFS_platformAllocatorRealloc(void *ptr, size_t s) +void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef realloc - return(realloc(ptr, s)); + return(realloc(ptr, (size_t) s)); } /* __PHYSFS_platformRealloc */ diff --git a/platform/win32.c b/platform/win32.c index c80e5c0..31bfd0c 100644 --- a/platform/win32.c +++ b/platform/win32.c @@ -1122,17 +1122,23 @@ void __PHYSFS_platformAllocatorDeinit(void) } /* __PHYSFS_platformAllocatorInit */ -void *__PHYSFS_platformAllocatorMalloc(size_t s) +void *__PHYSFS_platformAllocatorMalloc(PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef malloc - return(malloc(s)); + return(malloc((size_t) s)); } /* __PHYSFS_platformMalloc */ -void *__PHYSFS_platformAllocatorRealloc(void *ptr, size_t s) +void *__PHYSFS_platformAllocatorRealloc(void *ptr, PHYSFS_uint64 s) { + /* make sure s isn't larger than the address space of the platform... */ + if ( s > (0xFFFFFFFFFFFFFFFF >> (64-(sizeof (size_t) * 8))) ) + BAIL_MACRO(ERR_OUT_OF_MEMORY, NULL); #undef realloc - return(realloc(ptr, s)); + return(realloc(ptr, (size_t) s)); } /* __PHYSFS_platformRealloc */