From a3f6e91307fa45c5eb88c3dd7c573ba5ad7df199 Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Thu, 29 Jun 2000 20:44:47 +0000 Subject: [PATCH] This patch extends PC/config.h and configure.in as appropriate for 64-bit readiness (the config values are needed for patches that I will be submitting later today. The changes are as follows: - add SIZEOF_OFF_T #define's to PC/config.h (it was already in configure.in) - add SIZEOF_TIME_T #define to PC/config.h and configure Needed for some buffer overflow checking because sizeof(time_t) is different on Win64. - add SIZEOF_FPOS_T #define Needed for the Win64 large file support implementation. - add SIZEOF_HKEY in PC/config.h only Needed for proper Win32 vs. Win64 handling in PC/winreg.c - #define HAVE_LARGEFILE_SUPPORT for Win64 - typedef long intptr_t; for all Windows except Win64 (which defines it itself) This is a new ANSI (I think) type that is useful (and used by me) for proper handling in msvcrtmodule.c and posixmodule.c - indent the nested #ifdef's and #defines in PC/config.h This is *so* much more readable. There cannot be a compiler compatibilty issue here can there? Perl uses indented #defines and it compiles with everything. --- PC/config.h | 42 ++++++++++++++++++++++++++++++++---------- acconfig.h | 3 +++ config.h.in | 9 +++++++++ configure.in | 17 +++++++++++++++++ 4 files changed, 61 insertions(+), 10 deletions(-) diff --git a/PC/config.h b/PC/config.h index 6a1e4c101b1..dfe51184275 100644 --- a/PC/config.h +++ b/PC/config.h @@ -241,23 +241,45 @@ typedef int pid_t; /* End of compilers - finish up */ +/* define the ANSI intptr_t type for portable use of a pointer sized + integer */ +#include +#if defined(MS_WINDOWS) && !defined(MS_WIN64) +typedef long intptr_t; +#endif + #if defined(MS_WIN64) /* maintain "win32" sys.platform for backward compatibility of Python code, the Win64 API should be close enough to the Win32 API to make this preferable */ -#define PLATFORM "win32" -#define SIZEOF_VOID_P 8 +# define PLATFORM "win32" +# define SIZEOF_VOID_P 8 +# define SIZEOF_TIME_T 8 +# define SIZEOF_OFF_T 4 +# define SIZEOF_FPOS_T 8 +# define SIZEOF_HKEY 8 +/* configure.in defines HAVE_LARGEFILE_SUPPORT iff HAVE_LONG_LONG, + sizeof(off_t) > sizeof(long), and sizeof(LONG_LONG) >= sizeof(off_t). + On Win64 the second condition is not true, but if fpos_t replaces off_t + then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64 + should define this. */ +# define HAVE_LARGEFILE_SUPPORT #elif defined(MS_WIN32) -#define PLATFORM "win32" -#ifdef _M_ALPHA -#define SIZEOF_VOID_P 8 -#else -#define SIZEOF_VOID_P 4 -#endif +# define PLATFORM "win32" +# ifdef _M_ALPHA +# define SIZEOF_VOID_P 8 +# define SIZEOF_TIME_T 8 +# else +# define SIZEOF_VOID_P 4 +# define SIZEOF_TIME_T 4 +# define SIZEOF_OFF_T 4 +# define SIZEOF_FPOS_T 8 +# define SIZEOF_HKEY 4 +# endif #elif defined(MS_WIN16) -#define PLATFORM "win16" +# define PLATFORM "win16" #else -#define PLATFORM "dos" +# define PLATFORM "dos" #endif diff --git a/acconfig.h b/acconfig.h index 8192aef889b..3c07ebc68d0 100644 --- a/acconfig.h +++ b/acconfig.h @@ -151,6 +151,9 @@ /* The number of bytes in an off_t. */ #undef SIZEOF_OFF_T +/* The number of bytes in a time_t. */ +#undef SIZEOF_TIME_T + /* Defined to enable large file support when an off_t is bigger than a long and long long is available and at least as big as an off_t. You may need to add some flags for configuration and compilation to enable this mode. diff --git a/config.h.in b/config.h.in index 704f50a6067..89e52a296b6 100644 --- a/config.h.in +++ b/config.h.in @@ -213,6 +213,9 @@ /* The number of bytes in an off_t. */ #undef SIZEOF_OFF_T +/* The number of bytes in a time_t. */ +#undef SIZEOF_TIME_T + /* Defined to enable large file support when an off_t is bigger than a long and long long is available and at least as big as an off_t. You may need to add some flags for configuration and compilation to enable this mode. @@ -234,6 +237,9 @@ /* The number of bytes in a float. */ #undef SIZEOF_FLOAT +/* The number of bytes in a fpos_t. */ +#undef SIZEOF_FPOS_T + /* The number of bytes in a int. */ #undef SIZEOF_INT @@ -546,6 +552,9 @@ /* Define if you have the header file. */ #undef HAVE_SYS_SOCKET_H +/* Define if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + /* Define if you have the header file. */ #undef HAVE_SYS_TIME_H diff --git a/configure.in b/configure.in index fd5f36845e2..5790801a981 100644 --- a/configure.in +++ b/configure.in @@ -389,6 +389,7 @@ AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(float) AC_CHECK_SIZEOF(double) +AC_CHECK_SIZEOF(fpos_t) AC_MSG_CHECKING(for long long support) have_long_long=no @@ -424,6 +425,22 @@ else AC_MSG_RESULT(no) fi +# AC_CHECK_SIZEOF() doesn't include . +AC_MSG_CHECKING(size of time_t) +AC_CACHE_VAL(ac_cv_sizeof_time_t, +[AC_TRY_RUN([#include +#include +main() +{ + FILE *f=fopen("conftestval", "w"); + if (!f) exit(1); + fprintf(f, "%d\n", sizeof(time_t)); + exit(0); +}], ac_cv_sizeof_time_t=`cat conftestval`, ac_cv_sizeof_time_t=0) +]) +AC_MSG_RESULT($ac_cv_sizeof_time_t) +AC_DEFINE_UNQUOTED(SIZEOF_TIME_T, $ac_cv_sizeof_time_t) + # Minor variations in building a framework between NextStep versions 4 and 5 AC_SUBST(LIBTOOL_CRUFT)