From: <zu...@us...> - 2015-03-02 22:35:06
|
Revision: 5128 http://sourceforge.net/p/fuse-emulator/code/5128 Author: zubzero Date: 2015-03-02 22:35:04 +0000 (Mon, 02 Mar 2015) Log Message: ----------- Add libspectrum_{m,re}alloc_n() and use for libspectrum_{new,renew}() macros Modified Paths: -------------- trunk/libspectrum/hacking/ChangeLog trunk/libspectrum/libspectrum.h.in trunk/libspectrum/memory.c Modified: trunk/libspectrum/hacking/ChangeLog =================================================================== --- trunk/libspectrum/hacking/ChangeLog 2015-03-02 22:32:05 UTC (rev 5127) +++ trunk/libspectrum/hacking/ChangeLog 2015-03-02 22:35:04 UTC (rev 5128) @@ -986,3 +986,5 @@ zxs.c: use libspectrum_{new,new0,renew}() macros where sizeof(elem) == 1 (Stuart). 20150302 memory.c: check for overflow in libspectrum_calloc() (Stuart). +20150302 libspectrum.h.in,memory.c: add libspectrum_{m,re}alloc_n() and use this + for libspectrum_{new,renew}() macros (Stuart). Modified: trunk/libspectrum/libspectrum.h.in =================================================================== --- trunk/libspectrum/libspectrum.h.in 2015-03-02 22:32:05 UTC (rev 5127) +++ trunk/libspectrum/libspectrum.h.in 2015-03-02 22:35:04 UTC (rev 5128) @@ -143,20 +143,22 @@ } libspectrum_mem_vtable_t; WIN32_DLL void* libspectrum_malloc( size_t size ); +WIN32_DLL void* libspectrum_malloc_n( size_t nmemb, size_t size ); WIN32_DLL void* libspectrum_calloc( size_t nmemb, size_t size ); WIN32_DLL void* libspectrum_realloc( void *ptr, size_t size ); +WIN32_DLL void* libspectrum_realloc_n( void *ptr, size_t nmemb, size_t size ); WIN32_DLL void libspectrum_free( void *ptr ); WIN32_DLL void libspectrum_mem_set_vtable( libspectrum_mem_vtable_t *table ); #define libspectrum_new( type, count ) \ - ( ( type * ) libspectrum_malloc( sizeof( type ) * (count) ) ) + ( ( type * ) libspectrum_malloc_n( (count), sizeof( type ) ) ) #define libspectrum_new0( type, count ) \ ( ( type * ) libspectrum_calloc( (count), sizeof( type ) ) ) #define libspectrum_renew( type, mem, count ) \ - ( ( type * ) libspectrum_realloc( (void *)mem, sizeof( type ) * (count) ) ) + ( ( type * ) libspectrum_realloc_n( (void *)mem, (count), sizeof( type ) ) ) /* Attempt to identify a given file */ Modified: trunk/libspectrum/memory.c =================================================================== --- trunk/libspectrum/memory.c 2015-03-02 22:32:05 UTC (rev 5127) +++ trunk/libspectrum/memory.c 2015-03-02 22:35:04 UTC (rev 5128) @@ -46,6 +46,14 @@ } void* +libspectrum_malloc_n( size_t nmemb, size_t size ) +{ + if( nmemb > SIZE_MAX / size ) abort(); + + return libspectrum_malloc( nmemb * size ); +} + +void* libspectrum_calloc( size_t nmemb, size_t size ) { void *ptr; @@ -71,6 +79,14 @@ return ptr; } +void* +libspectrum_realloc_n( void *ptr, size_t nmemb, size_t size ) +{ + if( nmemb > SIZE_MAX / size ) abort(); + + return libspectrum_realloc( ptr, nmemb * size ); +} + void libspectrum_free( void *ptr ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |