diff options
Diffstat (limited to 'gl/xmalloc.c')
| -rw-r--r-- | gl/xmalloc.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/gl/xmalloc.c b/gl/xmalloc.c index ecce5296..57e34b7c 100644 --- a/gl/xmalloc.c +++ b/gl/xmalloc.c | |||
| @@ -1,8 +1,6 @@ | |||
| 1 | /* xmalloc.c -- malloc with out of memory checking | 1 | /* xmalloc.c -- malloc with out of memory checking |
| 2 | 2 | ||
| 3 | Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, | 3 | Copyright (C) 1990-2000, 2002-2006, 2008-2013 Free Software Foundation, Inc. |
| 4 | 2000, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010 Free Software | ||
| 5 | Foundation, Inc. | ||
| 6 | 4 | ||
| 7 | This program is free software: you can redistribute it and/or modify | 5 | This program is free software: you can redistribute it and/or modify |
| 8 | it under the terms of the GNU General Public License as published by | 6 | it under the terms of the GNU General Public License as published by |
| @@ -19,19 +17,17 @@ | |||
| 19 | 17 | ||
| 20 | #include <config.h> | 18 | #include <config.h> |
| 21 | 19 | ||
| 22 | #if ! HAVE_INLINE | 20 | #define XALLOC_INLINE _GL_EXTERN_INLINE |
| 23 | # define static_inline | 21 | |
| 24 | #endif | ||
| 25 | #include "xalloc.h" | 22 | #include "xalloc.h" |
| 26 | #undef static_inline | ||
| 27 | 23 | ||
| 28 | #include <stdlib.h> | 24 | #include <stdlib.h> |
| 29 | #include <string.h> | 25 | #include <string.h> |
| 30 | 26 | ||
| 31 | /* 1 if calloc is known to be compatible with GNU calloc. This | 27 | /* 1 if calloc is known to be compatible with GNU calloc. This |
| 32 | matters if we are not also using the calloc module, which defines | 28 | matters if we are not also using the calloc module, which defines |
| 33 | HAVE_CALLOC and supports the GNU API even on non-GNU platforms. */ | 29 | HAVE_CALLOC_GNU and supports the GNU API even on non-GNU platforms. */ |
| 34 | #if defined HAVE_CALLOC || defined __GLIBC__ | 30 | #if defined HAVE_CALLOC_GNU || (defined __GLIBC__ && !defined __UCLIBC__) |
| 35 | enum { HAVE_GNU_CALLOC = 1 }; | 31 | enum { HAVE_GNU_CALLOC = 1 }; |
| 36 | #else | 32 | #else |
| 37 | enum { HAVE_GNU_CALLOC = 0 }; | 33 | enum { HAVE_GNU_CALLOC = 0 }; |
| @@ -54,8 +50,16 @@ xmalloc (size_t n) | |||
| 54 | void * | 50 | void * |
| 55 | xrealloc (void *p, size_t n) | 51 | xrealloc (void *p, size_t n) |
| 56 | { | 52 | { |
| 53 | if (!n && p) | ||
| 54 | { | ||
| 55 | /* The GNU and C99 realloc behaviors disagree here. Act like | ||
| 56 | GNU, even if the underlying realloc is C99. */ | ||
| 57 | free (p); | ||
| 58 | return NULL; | ||
| 59 | } | ||
| 60 | |||
| 57 | p = realloc (p, n); | 61 | p = realloc (p, n); |
| 58 | if (!p && n != 0) | 62 | if (!p && n) |
| 59 | xalloc_die (); | 63 | xalloc_die (); |
| 60 | return p; | 64 | return p; |
| 61 | } | 65 | } |
