summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-09-10 22:04:45 (GMT)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-09-10 22:04:45 (GMT)
commit05e344954de5f4e55eb49dc44b0f8e1ec272a06c (patch)
tree85368f03ea1781b7669c3ebb94a5e40d57e163aa
parent4dd3a50ca480eef7bd898cfbfef8377231e18ae9 (diff)
downloadcpython-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/NEWS8
-rw-r--r--Modules/_collectionsmodule.c2
-rw-r--r--Modules/_multiprocessing/connection.h6
-rw-r--r--Modules/_multiprocessing/multiprocessing.h1
-rw-r--r--Python/Python-ast.c2
5 files changed, 13 insertions, 6 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 4696a80..b9ec0e1 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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");