Commit 934c90de authored by Georg Brandl's avatar Georg Brandl

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.
parent b14b59fc
...@@ -126,7 +126,7 @@ typedef Py_intptr_t Py_ssize_t; ...@@ -126,7 +126,7 @@ typedef Py_intptr_t Py_ssize_t;
* Py_ssize_t on the platform. * Py_ssize_t on the platform.
*/ */
#ifndef PY_FORMAT_SIZE_T #ifndef PY_FORMAT_SIZE_T
# if SIZEOF_SIZE_T == SIZEOF_INT # if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__)
# define PY_FORMAT_SIZE_T "" # define PY_FORMAT_SIZE_T ""
# elif SIZEOF_SIZE_T == SIZEOF_LONG # elif SIZEOF_SIZE_T == SIZEOF_LONG
# define PY_FORMAT_SIZE_T "l" # define PY_FORMAT_SIZE_T "l"
......
...@@ -16,6 +16,8 @@ Core and builtins ...@@ -16,6 +16,8 @@ Core and builtins
not being recognized as a keyword after, e.g., this statement: not being recognized as a keyword after, e.g., this statement:
from __future__ import division, with_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. - Allow exception instances to be directly sliced again.
......
#! /bin/sh #! /bin/sh
# From configure.in Revision: 51173 . # From configure.in Revision: 51727 .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.59 for python 2.5. # Generated by GNU Autoconf 2.59 for python 2.5.
# #
...@@ -22110,12 +22110,26 @@ cat >>conftest.$ac_ext <<_ACEOF ...@@ -22110,12 +22110,26 @@ cat >>conftest.$ac_ext <<_ACEOF
int main() 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) if(sprintf(buffer, "%zd", (size_t)123) < 0)
return 1; 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 1;
return 0; return 0;
......
...@@ -3352,14 +3352,28 @@ AC_TRY_RUN([#include <stdio.h> ...@@ -3352,14 +3352,28 @@ AC_TRY_RUN([#include <stdio.h>
int main() 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) if(sprintf(buffer, "%zd", (size_t)123) < 0)
return 1; return 1;
if (strncmp(buffer, "123", 3)) if (strcmp(buffer, "123"))
return 1; return 1;
if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0)
return 1;
if (strcmp(buffer, "-123"))
return 1;
return 0; return 0;
}], }],
[AC_MSG_RESULT(yes) [AC_MSG_RESULT(yes)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment