X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fcommon_allocation.c;h=e62c12d086254b014391076ddf4800ab141148d1;hb=0ea8e006d5f5ef84e31e000607bd24a23f8fc1ed;hp=1e546b96240238981e0a560c29346c75f3e3086a;hpb=42788c9183bb61c5a5435b4a9e28ff21663494a3;p=oweals%2Fgnunet.git diff --git a/src/util/common_allocation.c b/src/util/common_allocation.c index 1e546b962..e62c12d08 100644 --- a/src/util/common_allocation.c +++ b/src/util/common_allocation.c @@ -32,11 +32,11 @@ #endif #if 0 - #define W32_MEM_LIMIT 200000000 +#define W32_MEM_LIMIT 200000000 #endif #ifdef W32_MEM_LIMIT - static LONG mem_used = 0; +static LONG mem_used = 0; #endif /** @@ -47,26 +47,43 @@ * this function (or GNUNET_malloc) to allocate more than several MB * of memory, if you are possibly needing a very large chunk use * GNUNET_xmalloc_unchecked_ instead. - * @param filename where in the code was the call to GNUNET_array_grow - * @param linenumber where in the code was the call to GNUNET_array_grow + * @param filename where in the code was the call to GNUNET_malloc + * @param linenumber where in the code was the call to GNUNET_malloc * @return pointer to size bytes of memory */ void * GNUNET_xmalloc_ (size_t size, const char *filename, int linenumber) { + void *ret; /* As a security precaution, we generally do not allow very large allocations using the default 'GNUNET_malloc' macro */ GNUNET_assert_at (size <= GNUNET_MAX_MALLOC_CHECKED, filename, linenumber); - return GNUNET_xmalloc_unchecked_ (size, filename, linenumber); + ret = GNUNET_xmalloc_unchecked_ (size, filename, linenumber); + if (ret == NULL) + { + GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "malloc"); + abort (); + } + return ret; } + +/** + * Wrapper around malloc. Allocates size bytes of memory. + * The memory will be zero'ed out. + * + * @param size the number of bytes to allocate + * @param filename where in the code was the call to GNUNET_malloc_large + * @param linenumber where in the code was the call to GNUNET_malloc_large + * @return pointer to size bytes of memory, NULL if we do not have enough memory + */ void * GNUNET_xmalloc_unchecked_ (size_t size, const char *filename, int linenumber) { void *result; #ifdef W32_MEM_LIMIT - size += sizeof(size_t); + size += sizeof (size_t); if (mem_used + size > W32_MEM_LIMIT) return NULL; #endif @@ -74,10 +91,7 @@ GNUNET_xmalloc_unchecked_ (size_t size, const char *filename, int linenumber) GNUNET_assert_at (size < INT_MAX, filename, linenumber); result = malloc (size); if (result == NULL) - { - GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "malloc"); - abort (); - } + return NULL; memset (result, 0, size); #ifdef W32_MEM_LIMIT @@ -109,7 +123,7 @@ GNUNET_xrealloc_ (void *ptr, const char *filename, int linenumber) { #ifdef W32_MEM_LIMIT - n += sizeof(size_t); + n += sizeof (size_t); ptr = &((size_t *) ptr)[-1]; mem_used = mem_used - *((size_t *) ptr) + n; #endif @@ -148,8 +162,8 @@ GNUNET_xfree_ (void *ptr, const char *filename, int linenumber) * Dup a string (same semantics as strdup). * * @param str the string to dup - * @param filename where in the code was the call to GNUNET_array_grow - * @param linenumber where in the code was the call to GNUNET_array_grow + * @param filename where in the code was the call to GNUNET_strdup + * @param linenumber where in the code was the call to GNUNET_strdup * @return strdup(str) */ char *