From 934c90de0de8a0fd5f07b483b18d98beb857dbd9 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 25 Sep 2006 06:58:00 +0000 Subject: [PATCH] Backport rev. 51971: Fix %zd string formatting on Mac OS X so it prints negative numbers. In addition to testing positive numbers, verify negative numbers work in configure. In order to avoid compiler warnings on OS X 10.4, also change the order of the check for the format character to use (PY_FORMAT_SIZE_T) in the sprintf format for Py_ssize_t. This patch changes PY_FORMAT_SIZE_T from "" to "l" if it wasn't defined at configure time. Need to verify the buildbot results. --- Include/pyport.h | 2 +- Misc/NEWS | 2 ++ configure | 20 +++++++++++++++++--- configure.in | 20 +++++++++++++++++--- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Include/pyport.h b/Include/pyport.h index be6c51fc5aa..8f8e514c349 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -126,7 +126,7 @@ typedef Py_intptr_t Py_ssize_t; * Py_ssize_t on the platform. */ #ifndef PY_FORMAT_SIZE_T -# if SIZEOF_SIZE_T == SIZEOF_INT +# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) # define PY_FORMAT_SIZE_T "" # elif SIZEOF_SIZE_T == SIZEOF_LONG # define PY_FORMAT_SIZE_T "l" diff --git a/Misc/NEWS b/Misc/NEWS index 685daf68232..42b366d6680 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -16,6 +16,8 @@ Core and builtins not being recognized as a keyword after, e.g., this statement: from __future__ import division, with_statement +- Fix %zd string formatting on Mac OS X so it prints negative numbers. + - Allow exception instances to be directly sliced again. diff --git a/configure b/configure index 794a0be5cea..6b96c77bbaa 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 51173 . +# From configure.in Revision: 51727 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for python 2.5. # @@ -22110,12 +22110,26 @@ cat >>conftest.$ac_ext <<_ACEOF int main() { - char buffer[4]; + char buffer[256]; + +#ifdef HAVE_SSIZE_T +typedef ssize_t Py_ssize_t; +#elif SIZEOF_VOID_P == SIZEOF_LONG +typedef long Py_ssize_t; +#else +typedef int Py_ssize_t; +#endif if(sprintf(buffer, "%zd", (size_t)123) < 0) return 1; - if (strncmp(buffer, "123", 3)) + if (strcmp(buffer, "123")) + return 1; + + if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0) + return 1; + + if (strcmp(buffer, "-123")) return 1; return 0; diff --git a/configure.in b/configure.in index 410f1afad86..711e19e52d9 100644 --- a/configure.in +++ b/configure.in @@ -3352,14 +3352,28 @@ AC_TRY_RUN([#include int main() { - char buffer[4]; + char buffer[256]; + +#ifdef HAVE_SSIZE_T +typedef ssize_t Py_ssize_t; +#elif SIZEOF_VOID_P == SIZEOF_LONG +typedef long Py_ssize_t; +#else +typedef int Py_ssize_t; +#endif if(sprintf(buffer, "%zd", (size_t)123) < 0) return 1; - if (strncmp(buffer, "123", 3)) + if (strcmp(buffer, "123")) return 1; - + + if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0) + return 1; + + if (strcmp(buffer, "-123")) + return 1; + return 0; }], [AC_MSG_RESULT(yes)