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. Backport candidate (if everyone thinks this patch can't be improved).
This commit is contained in:
parent
d10a0f7766
commit
4a8fbdb1b2
|
@ -126,10 +126,10 @@ 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_LONG
|
||||||
# define PY_FORMAT_SIZE_T ""
|
|
||||||
# elif SIZEOF_SIZE_T == SIZEOF_LONG
|
|
||||||
# define PY_FORMAT_SIZE_T "l"
|
# define PY_FORMAT_SIZE_T "l"
|
||||||
|
# elif SIZEOF_SIZE_T == SIZEOF_INT
|
||||||
|
# define PY_FORMAT_SIZE_T ""
|
||||||
# elif defined(MS_WINDOWS)
|
# elif defined(MS_WINDOWS)
|
||||||
# define PY_FORMAT_SIZE_T "I"
|
# define PY_FORMAT_SIZE_T "I"
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 1?
|
||||||
Core and builtins
|
Core and builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
- Bug #1551432: Exceptions do not define an explicit __unicode__ method. This
|
- Bug #1551432: Exceptions do not define an explicit __unicode__ method. This
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#! /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.6.
|
# Generated by GNU Autoconf 2.59 for python 2.6.
|
||||||
#
|
#
|
||||||
|
@ -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;
|
||||||
|
|
18
configure.in
18
configure.in
|
@ -3352,12 +3352,26 @@ 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;
|
||||||
|
|
||||||
|
if (sprintf(buffer, "%zd", (Py_ssize_t)-123) < 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (strcmp(buffer, "-123"))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue