diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2006-02-16 06:54:25 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2006-02-16 06:54:25 (GMT) |
commit | 2c95cc6d72957296c46bb11362359675a47e2085 (patch) | |
tree | 9e6e78432b2aef86240297833b644d4d60d771a7 /Objects | |
parent | 26efe402c2a5dba441dc2feae2f15fea6be452ba (diff) | |
download | cpython-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.c | 4 | ||||
-rw-r--r-- | Objects/dictobject.c | 2 | ||||
-rw-r--r-- | Objects/funcobject.c | 6 | ||||
-rw-r--r-- | Objects/listobject.c | 3 | ||||
-rw-r--r-- | Objects/stringobject.c | 21 | ||||
-rw-r--r-- | Objects/structseq.c | 6 | ||||
-rw-r--r-- | Objects/typeobject.c | 3 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 9 |
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; } |