Mercurial > cpython-lru_cache-weakref
diff Objects/stringobject.c @ 36510:0f3894bb2ada legacy-trunk
Support %zd in PyErr_Format and PyString_FromFormat.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Thu, 16 Feb 2006 06:54:25 +0000 |
| parents | 7fdc639bc5b4 |
| children | d6d415df0df0 |
line wrap: on
line diff
--- a/Objects/stringobject.c Thu Feb 16 06:21:57 2006 +0000 +++ b/Objects/stringobject.c Thu Feb 16 06:54:25 2006 +0000 @@ -181,6 +181,9 @@ 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 @@ 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 @@ 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 @@ 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);
