From 927fc40c9a396cd36b6eaf963f25dfbb21959487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Thu, 16 Feb 2006 06:54:25 +0000 Subject: Support %zd in PyErr_Format and PyString_FromFormat. --- Objects/stringobject.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'Objects/stringobject.c') diff --git a/Objects/stringobject.c b/Objects/stringobject.c index a8e1cb6900..8821dcecfd 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); -- cgit v1.2.1