changeset 8037:02252785b8d6 draft

(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.
author rubidium <rubidium@openttd.org>
date Sat, 08 Dec 2007 14:50:41 +0000
parents af0973569879
children 4b96d3a598ad
files src/bmp.cpp src/fontcache.cpp src/helpers.hpp src/misc/blob.hpp src/misc/fixedsizearray.hpp src/queue.cpp src/saveload.cpp src/settings.cpp src/spritecache.cpp src/spriteloader/png.cpp src/texteff.cpp src/video/dedicated_v.cpp src/win32.cpp
diffstat 13 files changed, 19 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/bmp.cpp
+++ b/src/bmp.cpp
@@ -354,7 +354,7 @@
 {
 	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;
 
 	/* Load image */
--- a/src/fontcache.cpp
+++ b/src/fontcache.cpp
@@ -365,7 +365,7 @@
 
 void *AllocateFont(size_t size)
 {
-	return malloc(size);
+	return MallocT<byte>(size);
 }
 
 
--- a/src/helpers.hpp
+++ b/src/helpers.hpp
@@ -12,6 +12,7 @@
 template <typename T> FORCEINLINE T* MallocT(size_t num_elements)
 {
 	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;
 }
 /** 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* CallocT(size_t num_elements)
 {
 	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;
 }
 /** 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* ReallocT(T* t_ptr, size_t num_elements)
 {
 	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;
 }
 
--- a/src/misc/blob.hpp
+++ b/src/misc/blob.hpp
@@ -298,7 +298,7 @@
 	/** all allocation should happen here */
 	static FORCEINLINE CHdr* RawAlloc(bsize_t num_bytes)
 	{
-		return (CHdr*)malloc(num_bytes);
+		return (CHdr*)MallocT<byte>(num_bytes);
 	}
 
 	/** all deallocations should happen here */
--- a/src/misc/fixedsizearray.hpp
+++ b/src/misc/fixedsizearray.hpp
@@ -34,7 +34,7 @@
 	CFixedSizeArrayT()
 	{
 		// 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
 		RefCnt() = 1; // initial reference counter
 	}
--- a/src/queue.cpp
+++ b/src/queue.cpp
@@ -310,7 +310,7 @@
 	h->hash = hash;
 	h->size = 0;
 	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
 	debug("Buckets = %p", h->buckets);
 #endif
--- a/src/saveload.cpp
+++ b/src/saveload.cpp
@@ -575,7 +575,7 @@
 				if (len == 0) {
 					*(char**)ptr = NULL;
 				} else {
-					*(char**)ptr = (char*)malloc(len + 1); // terminating '\0'
+					*(char**)ptr = MallocT<char>(len + 1); // terminating '\0'
 					ptr = *(char**)ptr;
 					SlCopyBytes(ptr, len);
 				}
@@ -1060,7 +1060,7 @@
 static bool InitLZO()
 {
 	_sl.bufsize = LZO_SIZE;
-	_sl.buf = _sl.buf_ori = (byte*)malloc(LZO_SIZE);
+	_sl.buf = _sl.buf_ori = MallocT<byte>(LZO_SIZE);
 	return true;
 }
 
@@ -1085,7 +1085,7 @@
 static bool InitNoComp()
 {
 	_sl.bufsize = LZO_SIZE;
-	_sl.buf = _sl.buf_ori = (byte*)malloc(LZO_SIZE);
+	_sl.buf = _sl.buf_ori = MallocT<byte>(LZO_SIZE);
 	return true;
 }
 
@@ -1154,7 +1154,7 @@
 	if (inflateInit(&_z) != Z_OK) return false;
 
 	_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;
 }
 
@@ -1194,7 +1194,7 @@
 	if (deflateInit(&_z, 6) != Z_OK) return false;
 
 	_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;
 }
 
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -80,7 +80,7 @@
 	SettingsMemoryPool *p;
 	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->size = minsize;
 	p->next = NULL;
--- a/src/spritecache.cpp
+++ b/src/spritecache.cpp
@@ -491,7 +491,7 @@
 void GfxInitSpriteMem()
 {
 	/* 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 */
 	_spritecache_ptr->size = ((_sprite_cache_size * 1024 * 1024) - sizeof(MemBlock)) | S_FREE_MASK;
--- a/src/spriteloader/png.cpp
+++ b/src/spriteloader/png.cpp
@@ -144,7 +144,7 @@
 		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) {
 		png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
 		return false;
--- a/src/texteff.cpp
+++ b/src/texteff.cpp
@@ -292,7 +292,7 @@
 	/* If there is none found, we grow the array */
 	if (i == _num_text_effects) {
 		_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;
 		i = _num_text_effects - 1;
 	}
--- a/src/video/dedicated_v.cpp
+++ b/src/video/dedicated_v.cpp
@@ -133,7 +133,7 @@
 {
 	int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
 	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.height = _cur_resolution[1];
--- a/src/win32.cpp
+++ b/src/win32.cpp
@@ -322,7 +322,7 @@
 	size = GetFileSize(h, NULL);
 	if (size > 500000) goto error1;
 
-	mem = malloc(size);
+	mem = MallocT<byte>(size);
 	if (mem == NULL) goto error1;
 
 	if (!ReadFile(h, mem, size, &read, NULL) || read != size) goto error2;