Close SF bug 110826: a complaint about the way Python #define'd NULL.

It's hard to sort out what the bug was, exactly.  So, Big Hammer:

1. Python shouldn't be in the business of #define'ing NULL, period.
2. Users of the Python C API shouldn't be in the business of not including
   Python.h, period.

Hence:

1. Removed all #define's of NULL in Python source code (pyport.h and
   object.h).
2. Since we're *relying* on stdio.h defining NULL, put an #error in
   Python.h after its #include of stdio.h if NULL isn't defined then.
This commit is contained in:
Tim Peters 2000-09-10 01:02:41 +00:00
parent ecaf0d8b47
commit 4826a894c5
3 changed files with 4 additions and 11 deletions

View File

@ -36,6 +36,10 @@
#endif #endif
#include <stdio.h> #include <stdio.h>
#ifndef NULL
# error "Python.h requires that stdio.h define NULL."
#endif
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#ifdef HAVE_STDLIB_H #ifdef HAVE_STDLIB_H

View File

@ -423,13 +423,6 @@ extern DL_IMPORT(long) _Py_RefTotal;
#define Py_XINCREF(op) if ((op) == NULL) ; else Py_INCREF(op) #define Py_XINCREF(op) if ((op) == NULL) ; else Py_INCREF(op)
#define Py_XDECREF(op) if ((op) == NULL) ; else Py_DECREF(op) #define Py_XDECREF(op) if ((op) == NULL) ; else Py_DECREF(op)
/* Definition of NULL, so you don't have to include <stdio.h> */
#ifndef NULL
#define NULL 0
#endif
/* /*
_Py_NoneStruct is an object of undefined type which can be used in contexts _Py_NoneStruct is an object of undefined type which can be used in contexts
where NULL (nil) is not suitable (since NULL often means 'error'). where NULL (nil) is not suitable (since NULL often means 'error').

View File

@ -313,10 +313,6 @@ extern double hypot(double, double);
#define DL_IMPORT(RTYPE) RTYPE #define DL_IMPORT(RTYPE) RTYPE
#endif #endif
#ifndef NULL
#define NULL ((void *)0)
#endif
#ifdef MALLOC_ZERO_RETURNS_NULL #ifdef MALLOC_ZERO_RETURNS_NULL
/* XXX Always allocate one extra byte, since some malloc's return NULL /* XXX Always allocate one extra byte, since some malloc's return NULL
XXX for malloc(0) or realloc(p, 0). */ XXX for malloc(0) or realloc(p, 0). */