Commits

Fred Drake committed 25ddd3d

Rationalize use of limits.h, moving the inclusion to Python.h.
Add definitions of INT_MAX and LONG_MAX to pyport.h.
Remove includes of limits.h and conditional definitions of INT_MAX
and LONG_MAX elsewhere.

This closes SourceForge patch #101659 and bug #115323.

Comments (0)

Files changed (25)

 #include "patchlevel.h"
 #include "config.h"
 
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
 /* config.h may or may not define DL_IMPORT */
 #ifndef DL_IMPORT	/* declarations for DLL import/export */
 #define DL_IMPORT(RTYPE) RTYPE

Include/longobject.h

 
 #ifdef HAVE_LONG_LONG
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
 /* Hopefully this is portable... */
-#ifndef LONG_MAX
-#define LONG_MAX 2147483647L
-#endif
 #ifndef ULONG_MAX
 #define ULONG_MAX 4294967295U
 #endif
 #endif /* fd manipulation macros */
 
 
+/* limits.h constants that may be missing */
+
+#ifndef INT_MAX
+#define INT_MAX 2147483647
+#endif
+
+#ifndef LONG_MAX
+#if SIZEOF_LONG == 4
+#define LONG_MAX 0X7FFFFFFFL
+#elif SIZEOF_LONG == 8
+#define LONG_MAX 0X7FFFFFFFFFFFFFFFL
+#else
+#error "could not set LONG_MAX in pyport.h"
+#endif
+#endif
+
+#ifndef LONG_MIN
+#define LONG_MIN (-LONG_MAX-1)
+#endif
+
+#ifdef __NeXT__
+#ifdef __sparc__
+/*
+ * This works around a bug in the NS/Sparc 3.3 pre-release
+ * limits.h header file.
+ * 10-Feb-1995 bwarsaw@cnri.reston.va.us
+ */
+#undef LONG_MIN
+#define LONG_MIN (-LONG_MAX-1)
+#endif
+#endif
+
 #ifdef __cplusplus
 }
 #endif

Modules/_localemodule.c

 #include <errno.h>
 #include <locale.h>
 #include <string.h>
-#include <limits.h>
 #include <ctype.h>
 
 #if defined(MS_WIN32)
 
 #include "sre.h"
 
-#if defined(HAVE_LIMITS_H)
-#include <limits.h>
-#else
-#define INT_MAX 2147483647
-#endif
-
 #include <ctype.h>
 
 /* name of this module, minus the leading underscore */

Modules/arraymodule.c

 #include <sys/types.h>		/* For size_t */
 #endif /* DONT_HAVE_SYS_TYPES_H */
 #endif /* !STDC_HEADERS */
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif /* HAVE_LIMITS_H */
 
 struct arrayobject; /* Forward */
 
 /* UINT2 defines a two byte word */
 typedef unsigned short int UINT2;
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
+/* UINT4 defines a four byte word */
+#if SIZEOF_LONG == 4
+typedef unsigned long int UINT4;
 #else
-/* Wild guess */
-#define LONG_MAX 2147483647L
+#if INT_MAX == 2147483647
+typedef unsigned int UINT4;
 #endif
-
-/* UINT4 defines a four byte word */
-#if defined(INT_MAX) && INT_MAX == 2147483647
-typedef unsigned int UINT4;
-#else
-#if defined(LONG_MAX) && LONG_MAX == 2147483647L
-typedef unsigned long int UINT4;
-#endif
-/* Too bad if neither is */
+/* Too bad if neither is; pyport.h would need to be fixed. */
 #endif
 
 /* ========== End global.h; continue md5.h ========== */

Modules/selectmodule.c

 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
 #ifdef HAVE_POLL_H
 #include <poll.h>
 #endif

Modules/stropmodule.c

 
 #include "Python.h"
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#else
-#define INT_MAX 2147483647
-#endif
-
 #include <ctype.h>
 /* XXX This file assumes that the <ctype.h> is*() functions
    XXX are defined for all 8-bit characters! */

Modules/structmodule.c

 
 #include "Python.h"
 
-#include <limits.h>
 #include <ctype.h>
 
 

Objects/complexobject.c

 
 #include "Python.h"
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
 
 /* elementary operations on complex numbers */
 

Objects/fileobject.c

 #include "Python.h"
 #include "structmember.h"
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
 #ifndef DONT_HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif /* DONT_HAVE_SYS_TYPES_H */

Objects/floatobject.c

 #define CHECK(x) /* Don't know how to check */
 #endif
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifndef LONG_MAX
-#if SIZEOF_LONG == 4
-#define LONG_MAX 0X7FFFFFFFL
-#elif SIZEOF_LONG == 8
-#define LONG_MAX 0X7FFFFFFFFFFFFFFFL
-#else
-#error "could not set LONG_MAX"
-#endif
-#endif
-
-#ifndef LONG_MIN
-#define LONG_MIN (-LONG_MAX-1)
-#endif
-
-#ifdef __NeXT__
-#ifdef __sparc__
-/*
- * This works around a bug in the NS/Sparc 3.3 pre-release
- * limits.h header file.
- * 10-Feb-1995 bwarsaw@cnri.reston.va.us
- */
-#undef LONG_MIN
-#define LONG_MIN (-LONG_MAX-1)
-#endif
-#endif
-
 #if !defined(__STDC__) && !defined(macintosh)
 extern double fmod(double, double);
 extern double pow(double, double);

Objects/intobject.c

 #include "Python.h"
 #include <ctype.h>
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX 0X7FFFFFFFL
-#endif
-
-#ifndef LONG_MIN
-#define LONG_MIN (-LONG_MAX-1)
-#endif
-
 #ifndef CHAR_BIT
 #define CHAR_BIT 8
 #endif

Objects/listobject.c

 #else
 #include <sys/types.h>		/* For size_t */
 #endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
 
 #define ROUNDUP(n, PyTryBlock) \
 	((((n)+(PyTryBlock)-1)/(PyTryBlock))*(PyTryBlock))
 /* Generic object operations; and implementation of None (NoObject) */
 
 #include "Python.h"
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
 
 #ifdef macintosh
 #include "macglue.h"

Objects/stringobject.c

 int null_strings, one_strings;
 #endif
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#else
-#ifndef UCHAR_MAX
+#if !defined(HAVE_LIMITS_H) && !defined(UCHAR_MAX)
 #define UCHAR_MAX 255
 #endif
-#endif
 
 static PyStringObject *characters[UCHAR_MAX + 1];
 #ifndef DONT_SHARE_SHORT_STRINGS

Objects/unicodeobject.c

 #include "unicodeobject.h"
 #include "ucnhash.h"
 
-#if defined(HAVE_LIMITS_H)
-#include <limits.h>
-#else
-#define INT_MAX 2147483647
-#endif
-
 #ifdef MS_WIN32
 #include <windows.h>
 #endif

Parser/myreadline.c

 */
 
 #include "Python.h"
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
 
 int (*PyOS_InputHook)(void) = NULL;
 

Python/bltinmodule.c

 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
 
 /* Forward */
 static PyObject *filterstring(PyObject *, PyObject *);
 
 #include <ctype.h>
 
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#else
-#define INT_MAX 2147483647
-#endif
-
 /* Turn this on if your compiler chokes on the big switch: */
 /* #define CASE_TOO_BIG 1 */
 
 
 #include "Python.h"
 #include <ctype.h>
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
 
 /* --- Globals ------------------------------------------------------------ */
 
 #include "structmember.h"
 
 #include <ctype.h>
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifndef INT_MAX
-#define INT_MAX 2147483647
-#endif
 
 /* Three symbols from graminit.h are also defined in Python.h, with
    Py_ prefixes to their names.  Python.h can't include graminit.h
 #include "Python.h"
 
 #include <ctype.h>
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
 
 
 int PyArg_Parse(PyObject *, char *, ...);

Python/modsupport.c

 /* Module support implementation */
 
 #include "Python.h"
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
 
 #ifdef MPW /* MPW pushes 'extended' for float and double types with varargs */
 typedef extended va_double;