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/stringobject.c | |
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/stringobject.c')
-rw-r--r-- | Objects/stringobject.c | 21 |
1 files changed, 21 insertions, 0 deletions
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); |