diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2008-09-10 22:04:45 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2008-09-10 22:04:45 (GMT) |
commit | 05e344954de5f4e55eb49dc44b0f8e1ec272a06c (patch) | |
tree | 85368f03ea1781b7669c3ebb94a5e40d57e163aa | |
parent | 4dd3a50ca480eef7bd898cfbfef8377231e18ae9 (diff) | |
download | cpython-05e344954de5f4e55eb49dc44b0f8e1ec272a06c.zip cpython-05e344954de5f4e55eb49dc44b0f8e1ec272a06c.tar.gz cpython-05e344954de5f4e55eb49dc44b0f8e1ec272a06c.tar.bz2 |
#3743: PY_FORMAT_SIZE_T is designed for the OS "printf" functions, not for
PyString_FromFormat which has an independent implementation, and uses "%zd".
This makes a difference on win64, where printf needs "%Id" to display
64bit values. For example, queue.__repr__ was incorrect.
Reviewed by Martin von Loewis.
-rw-r--r-- | Misc/NEWS | 8 | ||||
-rw-r--r-- | Modules/_collectionsmodule.c | 2 | ||||
-rw-r--r-- | Modules/_multiprocessing/connection.h | 6 | ||||
-rw-r--r-- | Modules/_multiprocessing/multiprocessing.h | 1 | ||||
-rw-r--r-- | Python/Python-ast.c | 2 |
5 files changed, 13 insertions, 6 deletions
@@ -12,6 +12,14 @@ What's New in Python 2.6 release candidate 1? Core and Builtins ----------------- +- Issue #3743: In a few places, PY_FORMAT_SIZE_T was incorrectly used with + PyString_FromFormat or PyErr_Format to display size_t values. The macro + PY_FORMAT_SIZE_T is designed to select the correct format for the OS + ``printf`` function, whereas PyString_FromFormat has an independent + implementation and uses "%zd" on all platforms for size_t values. + This makes a difference on win64, where ``printf`` needs "%Id" to display + 64bit values. + - Issue #3634: _weakref.ref(Exception).__init__() gave invalid return value on error. diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index d6dcffd..da000d0 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -670,7 +670,7 @@ deque_repr(PyObject *deque) return NULL; } if (((dequeobject *)deque)->maxlen != -1) - fmt = PyString_FromFormat("deque(%%r, maxlen=%" PY_FORMAT_SIZE_T "d)", + fmt = PyString_FromFormat("deque(%%r, maxlen=%zd)", ((dequeobject *)deque)->maxlen); else fmt = PyString_FromString("deque(%r)"); diff --git a/Modules/_multiprocessing/connection.h b/Modules/_multiprocessing/connection.h index 66a3e8a..155b61b 100644 --- a/Modules/_multiprocessing/connection.h +++ b/Modules/_multiprocessing/connection.h @@ -47,8 +47,8 @@ connection_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return NULL; if (handle == INVALID_HANDLE_VALUE || (Py_ssize_t)handle < 0) { - PyErr_Format(PyExc_IOError, "invalid handle %" - PY_FORMAT_SIZE_T "d", (Py_ssize_t)handle); + PyErr_Format(PyExc_IOError, "invalid handle %zd", + (Py_ssize_t)handle); return NULL; } @@ -396,7 +396,7 @@ connection_repr(ConnectionObject *self) static char *conn_type[] = {"read-only", "write-only", "read-write"}; assert(self->flags >= 1 && self->flags <= 3); - return FROM_FORMAT("<%s %s, handle %" PY_FORMAT_SIZE_T "d>", + return FROM_FORMAT("<%s %s, handle %zd>", conn_type[self->flags - 1], CONNECTION_NAME, (Py_ssize_t)self->handle); } diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h index ec5042c..0b32790 100644 --- a/Modules/_multiprocessing/multiprocessing.h +++ b/Modules/_multiprocessing/multiprocessing.h @@ -56,7 +56,6 @@ # define PY_SSIZE_T_MAX INT_MAX # define PY_SSIZE_T_MIN INT_MIN # define F_PY_SSIZE_T "i" -# define PY_FORMAT_SIZE_T "" # define PyInt_FromSsize_t(n) PyInt_FromLong((long)n) #else # define F_PY_SSIZE_T "n" diff --git a/Python/Python-ast.c b/Python/Python-ast.c index f958145..1c78515 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -387,7 +387,7 @@ ast_type_init(PyObject *self, PyObject *args, PyObject *kw) if (PyTuple_GET_SIZE(args) > 0) { if (numfields != PyTuple_GET_SIZE(args)) { PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s" - "%" PY_FORMAT_SIZE_T "d positional argument%s", + "%zd positional argument%s", Py_TYPE(self)->tp_name, numfields == 0 ? "" : "either 0 or ", numfields, numfields == 1 ? "" : "s"); |