Whether platform malloc(0) returns NULL has nothing to do with whether

platform realloc(p, 0) returns NULL, so MALLOC_ZERO_RETURNS_NULL can
be correctly undefined yet realloc(p, 0) can return NULL anyway.

Prevent realloc(p, 0) doing free(p) and returning NULL via a different
hack.  Would probably be better to get rid of MALLOC_ZERO_RETURNS_NULL
entirely.

Bugfix candidate.
This commit is contained in:
Tim Peters 2002-03-02 08:43:19 +00:00
parent b77d343bc8
commit a5d78cc208
3 changed files with 24 additions and 14 deletions

View file

@ -111,13 +111,18 @@ extern DL_IMPORT(void) PyMem_Free(void *);
/* Macros */
#define PyMem_NEW(type, n) \
( (type *) PyMem_MALLOC(_PyMem_EXTRA + (n) * sizeof(type)) )
#define PyMem_RESIZE(p, type, n) \
if ((p) == NULL) \
(p) = (type *)(PyMem_MALLOC( \
_PyMem_EXTRA + (n) * sizeof(type))); \
else \
(p) = (type *)(PyMem_REALLOC((p), \
_PyMem_EXTRA + (n) * sizeof(type)))
/* See comment near MALLOC_ZERO_RETURNS_NULL in pyport.h. */
#define PyMem_RESIZE(p, type, n) \
do { \
size_t _sum = (n) * sizeof(type); \
if (!_sum) \
_sum = 1; \
(p) = (type *)((p) ? \
PyMem_REALLOC(p, _sum) : \
PyMem_MALLOC(_sum)); \
} while (0)
#define PyMem_DEL(p) PyMem_FREE(p)
/* PyMem_XDEL is deprecated. To avoid the call when p is NULL,