X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fxmalloc.c;h=1dec2193a14e7546e62d690588cc037496b424ba;hb=917d2c4a288a19c0da7fa98ad514288d0e045413;hp=582c319a9078e41f93c534aabfe03c92c6e665ac;hpb=5242cb5a8634bfa38b9333ff7f903e718ac6e292;p=yaz-moved-to-github.git diff --git a/src/xmalloc.c b/src/xmalloc.c index 582c319..1dec219 100644 --- a/src/xmalloc.c +++ b/src/xmalloc.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2012 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /** @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -22,6 +23,9 @@ #define TRACE_XMALLOC 1 #endif +/* treat any size >1/4 of max value of size_t to be an error */ +#define MALLOC_SIZE_MAX ((size_t)(-1) / 4) + static int log_level = 0; static int log_level_initialized = 0; @@ -244,8 +248,9 @@ void xmalloc_trav_f(const char *s, const char *file, int line) xmalloc_trav_d(file, line); } -void xmalloc_fatal(void) +void xmalloc_fatal(size_t size) { + assert(size < MALLOC_SIZE_MAX); exit(1); } @@ -264,9 +269,9 @@ void *xrealloc_f(void *o, size_t size, const char *file, int line) "%s:%d: xrealloc(s=%ld) %p -> %p", file, line, (long) size, o, p); if (!p) { - yaz_log(YLOG_FATAL|YLOG_ERRNO, "Out of memory, realloc (%ld bytes)", - (long) size); - xmalloc_fatal(); + yaz_log(YLOG_FATAL, "%s:%d: Out of memory, realloc(%ld bytes)", + file, line, (long) size); + xmalloc_fatal(size); } return p; } @@ -287,9 +292,9 @@ void *xmalloc_f(size_t size, const char *file, int line) if (!p) { - yaz_log(YLOG_FATAL, "Out of memory - malloc (%ld bytes)", - (long) size); - xmalloc_fatal(); + yaz_log(YLOG_FATAL, "%s:%d: Out of memory - malloc(%ld bytes)", + file, line, (long) size); + xmalloc_fatal(size); } return p; } @@ -309,9 +314,9 @@ void *xcalloc_f(size_t nmemb, size_t size, const char *file, int line) if (!p) { - yaz_log(YLOG_FATAL, "Out of memory - calloc (%ld, %ld)", - (long) nmemb, (long) size); - xmalloc_fatal(); + yaz_log(YLOG_FATAL, "%s:%d: Out of memory - calloc(%ld, %ld)", + file, line, (long) nmemb, (long) size); + xmalloc_fatal(size); } return p; }