1
0
Fork 0

(svn r11597) -Change: replace all remaining instances of (re|m|c)alloc with (Re|M|C)allocT and add a check for out-of-memory situations to the *allocT functions.

release/0.6
rubidium 2007-12-08 14:50:41 +00:00
parent 73c58d8a40
commit f1e4914b5f
13 changed files with 19 additions and 16 deletions

View File

@ -354,7 +354,7 @@ bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data)
{ {
assert(info != NULL && data != NULL); assert(info != NULL && data != NULL);
data->bitmap = (byte*)calloc(info->width * info->height, ((info->bpp == 24) ? 3 : 1) * sizeof(byte)); data->bitmap = CallocT<byte>(info->width * info->height * ((info->bpp == 24) ? 3 : 1));
if (data->bitmap == NULL) return false; if (data->bitmap == NULL) return false;
/* Load image */ /* Load image */

View File

@ -365,7 +365,7 @@ static void SetGlyphPtr(FontSize size, WChar key, const GlyphEntry *glyph)
void *AllocateFont(size_t size) void *AllocateFont(size_t size)
{ {
return malloc(size); return MallocT<byte>(size);
} }

View File

@ -12,6 +12,7 @@
template <typename T> FORCEINLINE T* MallocT(size_t num_elements) template <typename T> FORCEINLINE T* MallocT(size_t num_elements)
{ {
T *t_ptr = (T*)malloc(num_elements * sizeof(T)); T *t_ptr = (T*)malloc(num_elements * sizeof(T));
if (t_ptr == NULL && num_elements != 0) error("Out of memory. Cannot allocate %i bytes", num_elements * sizeof(T));
return t_ptr; return t_ptr;
} }
/** When allocating using malloc/calloc in C++ it is usually needed to cast the return value /** When allocating using malloc/calloc in C++ it is usually needed to cast the return value
@ -19,6 +20,7 @@ template <typename T> FORCEINLINE T* MallocT(size_t num_elements)
template <typename T> FORCEINLINE T* CallocT(size_t num_elements) template <typename T> FORCEINLINE T* CallocT(size_t num_elements)
{ {
T *t_ptr = (T*)calloc(num_elements, sizeof(T)); T *t_ptr = (T*)calloc(num_elements, sizeof(T));
if (t_ptr == NULL && num_elements != 0) error("Out of memory. Cannot allocate %i bytes", num_elements * sizeof(T));
return t_ptr; return t_ptr;
} }
/** When allocating using malloc/calloc in C++ it is usually needed to cast the return value /** When allocating using malloc/calloc in C++ it is usually needed to cast the return value
@ -26,6 +28,7 @@ template <typename T> FORCEINLINE T* CallocT(size_t num_elements)
template <typename T> FORCEINLINE T* ReallocT(T* t_ptr, size_t num_elements) template <typename T> FORCEINLINE T* ReallocT(T* t_ptr, size_t num_elements)
{ {
t_ptr = (T*)realloc(t_ptr, num_elements * sizeof(T)); t_ptr = (T*)realloc(t_ptr, num_elements * sizeof(T));
if (t_ptr == NULL && num_elements != 0) error("Out of memory. Cannot reallocate %i bytes", num_elements * sizeof(T));
return t_ptr; return t_ptr;
} }

View File

@ -298,7 +298,7 @@ public:
/** all allocation should happen here */ /** all allocation should happen here */
static FORCEINLINE CHdr* RawAlloc(bsize_t num_bytes) static FORCEINLINE CHdr* RawAlloc(bsize_t num_bytes)
{ {
return (CHdr*)malloc(num_bytes); return (CHdr*)MallocT<byte>(num_bytes);
} }
/** all deallocations should happen here */ /** all deallocations should happen here */

View File

@ -34,7 +34,7 @@ struct CFixedSizeArrayT {
CFixedSizeArrayT() CFixedSizeArrayT()
{ {
// allocate block for header + items (don't construct items) // allocate block for header + items (don't construct items)
m_items = (Titem*)(((int8*)malloc(ThdrSize + Tcapacity * sizeof(Titem))) + ThdrSize); m_items = (Titem*)((MallocT<int8>(ThdrSize + Tcapacity * sizeof(Titem))) + ThdrSize);
SizeRef() = 0; // initial number of items SizeRef() = 0; // initial number of items
RefCnt() = 1; // initial reference counter RefCnt() = 1; // initial reference counter
} }

View File

@ -310,7 +310,7 @@ void init_Hash(Hash* h, Hash_HashProc* hash, uint num_buckets)
h->hash = hash; h->hash = hash;
h->size = 0; h->size = 0;
h->num_buckets = num_buckets; h->num_buckets = num_buckets;
h->buckets = (HashNode*)malloc(num_buckets * (sizeof(*h->buckets) + sizeof(*h->buckets_in_use))); h->buckets = (HashNode*)MallocT<byte>(num_buckets * (sizeof(*h->buckets) + sizeof(*h->buckets_in_use)));
#ifdef HASH_DEBUG #ifdef HASH_DEBUG
debug("Buckets = %p", h->buckets); debug("Buckets = %p", h->buckets);
#endif #endif

View File

@ -575,7 +575,7 @@ static void SlString(void *ptr, size_t length, VarType conv)
if (len == 0) { if (len == 0) {
*(char**)ptr = NULL; *(char**)ptr = NULL;
} else { } else {
*(char**)ptr = (char*)malloc(len + 1); // terminating '\0' *(char**)ptr = MallocT<char>(len + 1); // terminating '\0'
ptr = *(char**)ptr; ptr = *(char**)ptr;
SlCopyBytes(ptr, len); SlCopyBytes(ptr, len);
} }
@ -1060,7 +1060,7 @@ static void WriteLZO(uint size)
static bool InitLZO() static bool InitLZO()
{ {
_sl.bufsize = LZO_SIZE; _sl.bufsize = LZO_SIZE;
_sl.buf = _sl.buf_ori = (byte*)malloc(LZO_SIZE); _sl.buf = _sl.buf_ori = MallocT<byte>(LZO_SIZE);
return true; return true;
} }
@ -1085,7 +1085,7 @@ static void WriteNoComp(uint size)
static bool InitNoComp() static bool InitNoComp()
{ {
_sl.bufsize = LZO_SIZE; _sl.bufsize = LZO_SIZE;
_sl.buf = _sl.buf_ori = (byte*)malloc(LZO_SIZE); _sl.buf = _sl.buf_ori = MallocT<byte>(LZO_SIZE);
return true; return true;
} }
@ -1154,7 +1154,7 @@ static bool InitReadZlib()
if (inflateInit(&_z) != Z_OK) return false; if (inflateInit(&_z) != Z_OK) return false;
_sl.bufsize = 4096; _sl.bufsize = 4096;
_sl.buf = _sl.buf_ori = (byte*)malloc(4096 + 4096); // also contains fread buffer _sl.buf = _sl.buf_ori = MallocT<byte>(4096 + 4096); // also contains fread buffer
return true; return true;
} }
@ -1194,7 +1194,7 @@ static bool InitWriteZlib()
if (deflateInit(&_z, 6) != Z_OK) return false; if (deflateInit(&_z, 6) != Z_OK) return false;
_sl.bufsize = 4096; _sl.bufsize = 4096;
_sl.buf = _sl.buf_ori = (byte*)malloc(4096); // also contains fread buffer _sl.buf = _sl.buf_ori = MallocT<byte>(4096); // also contains fread buffer
return true; return true;
} }

View File

@ -80,7 +80,7 @@ static SettingsMemoryPool *pool_new(uint minsize)
SettingsMemoryPool *p; SettingsMemoryPool *p;
if (minsize < 4096 - 12) minsize = 4096 - 12; if (minsize < 4096 - 12) minsize = 4096 - 12;
p = (SettingsMemoryPool*)malloc(sizeof(SettingsMemoryPool) - 1 + minsize); p = (SettingsMemoryPool*)MallocT<byte>(sizeof(SettingsMemoryPool) - 1 + minsize);
p->pos = 0; p->pos = 0;
p->size = minsize; p->size = minsize;
p->next = NULL; p->next = NULL;

View File

@ -491,7 +491,7 @@ const void *GetRawSprite(SpriteID sprite, bool real_sprite)
void GfxInitSpriteMem() void GfxInitSpriteMem()
{ {
/* initialize sprite cache heap */ /* initialize sprite cache heap */
if (_spritecache_ptr == NULL) _spritecache_ptr = (MemBlock*)malloc(_sprite_cache_size * 1024 * 1024); if (_spritecache_ptr == NULL) _spritecache_ptr = (MemBlock*)MallocT<byte>(_sprite_cache_size * 1024 * 1024);
/* A big free block */ /* A big free block */
_spritecache_ptr->size = ((_sprite_cache_size * 1024 * 1024) - sizeof(MemBlock)) | S_FREE_MASK; _spritecache_ptr->size = ((_sprite_cache_size * 1024 * 1024) - sizeof(MemBlock)) | S_FREE_MASK;

View File

@ -144,7 +144,7 @@ static bool LoadPNG(SpriteLoader::Sprite *sprite, const char *filename, uint32 i
pixelsize = sizeof(uint8); pixelsize = sizeof(uint8);
} }
row_pointer = (png_byte *)malloc(info_ptr->width * pixelsize); row_pointer = (png_byte *)MallocT<byte>(info_ptr->width * pixelsize);
if (row_pointer == NULL) { if (row_pointer == NULL) {
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
return false; return false;

View File

@ -292,7 +292,7 @@ TextEffectID AddTextEffect(StringID msg, int x, int y, uint16 duration, TextEffe
/* If there is none found, we grow the array */ /* If there is none found, we grow the array */
if (i == _num_text_effects) { if (i == _num_text_effects) {
_num_text_effects += 25; _num_text_effects += 25;
_text_effect_list = (TextEffect*) realloc(_text_effect_list, _num_text_effects * sizeof(TextEffect)); _text_effect_list = ReallocT<TextEffect>(_text_effect_list, _num_text_effects);
for (; i < _num_text_effects; i++) _text_effect_list[i].string_id = INVALID_STRING_ID; for (; i < _num_text_effects; i++) _text_effect_list[i].string_id = INVALID_STRING_ID;
i = _num_text_effects - 1; i = _num_text_effects - 1;
} }

View File

@ -133,7 +133,7 @@ const char *VideoDriver_Dedicated::Start(const char * const *parm)
{ {
int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(); int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
if (bpp == 0) _dedicated_video_mem = NULL; if (bpp == 0) _dedicated_video_mem = NULL;
else _dedicated_video_mem = malloc(_cur_resolution[0] * _cur_resolution[1] * (bpp / 8)); else _dedicated_video_mem = MallocT<byte>(_cur_resolution[0] * _cur_resolution[1] * (bpp / 8));
_screen.width = _screen.pitch = _cur_resolution[0]; _screen.width = _screen.pitch = _cur_resolution[0];
_screen.height = _cur_resolution[1]; _screen.height = _cur_resolution[1];

View File

@ -322,7 +322,7 @@ static void SubmitFile(HWND wnd, const TCHAR *file)
size = GetFileSize(h, NULL); size = GetFileSize(h, NULL);
if (size > 500000) goto error1; if (size > 500000) goto error1;
mem = malloc(size); mem = MallocT<byte>(size);
if (mem == NULL) goto error1; if (mem == NULL) goto error1;
if (!ReadFile(h, mem, size, &read, NULL) || read != size) goto error2; if (!ReadFile(h, mem, size, &read, NULL) || read != size) goto error2;