summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2006-02-16 06:54:25 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2006-02-16 06:54:25 (GMT)
commit2c95cc6d72957296c46bb11362359675a47e2085 (patch)
tree9e6e78432b2aef86240297833b644d4d60d771a7 /Objects
parent26efe402c2a5dba441dc2feae2f15fea6be452ba (diff)
downloadcpython-2c95cc6d72957296c46bb11362359675a47e2085.zip
cpython-2c95cc6d72957296c46bb11362359675a47e2085.tar.gz
cpython-2c95cc6d72957296c46bb11362359675a47e2085.tar.bz2
Support %zd in PyErr_Format and PyString_FromFormat.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/bufferobject.c4
-rw-r--r--Objects/dictobject.c2
-rw-r--r--Objects/funcobject.c6
-rw-r--r--Objects/listobject.c3
-rw-r--r--Objects/stringobject.c21
-rw-r--r--Objects/structseq.c6
-rw-r--r--Objects/typeobject.c3
-rw-r--r--Objects/unicodeobject.c9
8 files changed, 35 insertions, 19 deletions
diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c
index a21d0b1..73f361e 100644
--- a/Objects/bufferobject.c
+++ b/Objects/bufferobject.c
@@ -243,14 +243,14 @@ buffer_repr(PyBufferObject *self)
const char *status = self->b_readonly ? "read-only" : "read-write";
if ( self->b_base == NULL )
- return PyString_FromFormat("<%s buffer ptr %p, size %ld at %p>",
+ return PyString_FromFormat("<%s buffer ptr %p, size %zd at %p>",
status,
self->b_ptr,
(long)self->b_size,
self);
else
return PyString_FromFormat(
- "<%s buffer for %p, size %ld, offset %ld at %p>",
+ "<%s buffer for %p, size %zd, offset %zd at %p>",
status,
self->b_base,
(long)self->b_size,
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index abc9c8c..7910cb6 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1148,7 +1148,7 @@ PyDict_MergeFromSeq2(PyObject *d, PyObject *seq2, int override)
if (n != 2) {
PyErr_Format(PyExc_ValueError,
"dictionary update sequence element #%d "
- "has length %ld; 2 is required",
+ "has length %zd; 2 is required",
i, (long)n);
goto Fail;
}
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index d644001..ff70baf 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -248,8 +248,8 @@ func_set_code(PyFunctionObject *op, PyObject *value)
PyTuple_GET_SIZE(op->func_closure));
if (nclosure != nfree) {
PyErr_Format(PyExc_ValueError,
- "%s() requires a code object with %ld free vars,"
- " not %ld",
+ "%s() requires a code object with %zd free vars,"
+ " not %zd",
PyString_AsString(op->func_name),
(long)nclosure, (long)nfree);
return -1;
@@ -401,7 +401,7 @@ func_new(PyTypeObject* type, PyObject* args, PyObject* kw)
nclosure = closure == Py_None ? 0 : PyTuple_GET_SIZE(closure);
if (nfree != nclosure)
return PyErr_Format(PyExc_ValueError,
- "%s requires closure of length %ld, not %ld",
+ "%s requires closure of length %zd, not %zd",
PyString_AS_STRING(code->co_name),
(long)nfree, (long)nclosure);
if (nclosure) {
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 460f63a..a970c14 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2598,9 +2598,8 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
}
if (PySequence_Fast_GET_SIZE(seq) != slicelength) {
- /* XXX can we use %zd here? */
PyErr_Format(PyExc_ValueError,
- "attempt to assign sequence of size %ld to extended slice of size %ld",
+ "attempt to assign sequence of size %zd to extended slice of size %zd",
(long)PySequence_Fast_GET_SIZE(seq),
(long)slicelength);
Py_DECREF(seq);
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index a8e1cb6..8821dcec 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -181,6 +181,9 @@ PyString_FromFormatV(const char *format, va_list vargs)
added */
if (*f == 'l' && *(f+1) == 'd')
++f;
+ /* likewise for %zd */
+ if (*f == 'z' && *(f+1) == 'd')
+ ++f;
switch (*f) {
case 'c':
@@ -237,6 +240,7 @@ PyString_FromFormatV(const char *format, va_list vargs)
const char* p = f++;
Py_ssize_t i;
int longflag = 0;
+ int size_tflag = 0;
/* parse the width.precision part (we're only
interested in the precision value, if any) */
n = 0;
@@ -256,6 +260,11 @@ PyString_FromFormatV(const char *format, va_list vargs)
longflag = 1;
++f;
}
+ /* handle the size_t flag. */
+ if (*f == 'z' && *(f+1) == 'd') {
+ size_tflag = 1;
+ ++f;
+ }
switch (*f) {
case 'c':
@@ -264,6 +273,18 @@ PyString_FromFormatV(const char *format, va_list vargs)
case 'd':
if (longflag)
sprintf(s, "%ld", va_arg(vargs, long));
+ else if (size_tflag) {
+ /* Instead of checking whether the C
+ library supports %zd, handle the
+ common cases. */
+ #if SIZEOF_SIZE_T == SIZEOF_LONG
+ sprintf(s, "%ld", va_arg(vargs, long));
+ #elif defined(MS_WINDOWS)
+ sprintf(s, "%Id", va_arg(vargs, size_t));
+ #else
+ #error Cannot print size_t values
+ #endif
+ }
else
sprintf(s, "%d", va_arg(vargs, int));
s += strlen(s);
diff --git a/Objects/structseq.c b/Objects/structseq.c
index a95f3a9..7a01fc4 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -125,7 +125,7 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if (min_len != max_len) {
if (len < min_len) {
PyErr_Format(PyExc_TypeError,
- "%.500s() takes an at least %ld-sequence (%ld-sequence given)",
+ "%.500s() takes an at least %zd-sequence (%zd-sequence given)",
type->tp_name, (long)min_len, (long)len);
Py_DECREF(arg);
return NULL;
@@ -133,7 +133,7 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if (len > max_len) {
PyErr_Format(PyExc_TypeError,
- "%.500s() takes an at most %ld-sequence (%ld-sequence given)",
+ "%.500s() takes an at most %zd-sequence (%zd-sequence given)",
type->tp_name, (long)max_len, (long)len);
Py_DECREF(arg);
return NULL;
@@ -142,7 +142,7 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
else {
if (len != min_len) {
PyErr_Format(PyExc_TypeError,
- "%.500s() takes a %ld-sequence (%ld-sequence given)",
+ "%.500s() takes a %zd-sequence (%zd-sequence given)",
type->tp_name, (long)min_len, (long)len);
Py_DECREF(arg);
return NULL;
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index f52a87f..ac1e064 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -3372,10 +3372,9 @@ check_num_args(PyObject *ob, int n)
}
if (n == PyTuple_GET_SIZE(ob))
return 1;
- /* XXX %zd? */
PyErr_Format(
PyExc_TypeError,
- "expected %d arguments, got %d", n, (int)PyTuple_GET_SIZE(ob));
+ "expected %d arguments, got %zd", n, PyTuple_GET_SIZE(ob));
return 0;
}
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 1652b2f..684706d 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -791,8 +791,7 @@ int unicode_decode_call_errorhandler(const char *errors, PyObject **errorHandler
if (newpos<0)
newpos = insize+newpos;
if (newpos<0 || newpos>insize) {
- /* XXX %zd? */
- PyErr_Format(PyExc_IndexError, "position %d from error handler out of bounds", (int)newpos);
+ PyErr_Format(PyExc_IndexError, "position %zd from error handler out of bounds", newpos);
goto onError;
}
@@ -2473,8 +2472,7 @@ static PyObject *unicode_encode_call_errorhandler(const char *errors,
if (*newpos<0)
*newpos = size+*newpos;
if (*newpos<0 || *newpos>size) {
- /* XXX %zd? */
- PyErr_Format(PyExc_IndexError, "position %d from error handler out of bounds", (int)*newpos);
+ PyErr_Format(PyExc_IndexError, "position %zd from error handler out of bounds", *newpos);
Py_DECREF(restuple);
return NULL;
}
@@ -3373,8 +3371,7 @@ static PyObject *unicode_translate_call_errorhandler(const char *errors,
else
*newpos = i_newpos;
if (*newpos<0 || *newpos>size) {
- /* XXX %zd? */
- PyErr_Format(PyExc_IndexError, "position %d from error handler out of bounds", (int)*newpos);
+ PyErr_Format(PyExc_IndexError, "position %zd from error handler out of bounds", *newpos);
Py_DECREF(restuple);
return NULL;
}