diff Objects/unicodeobject.c @ 68203:87de017da4bf

Issue #10831: PyUnicode_FromFormat() supports %li, %lli and %zi formats
author Victor Stinner <victor.stinner@haypocalc.com>
date Wed, 02 Mar 2011 00:04:25 +0000
parents 73a499f0eaf1
children c7a936362281
line wrap: on
line diff
--- a/Objects/unicodeobject.c	Wed Mar 02 00:01:53 2011 +0000
+++ b/Objects/unicodeobject.c	Wed Mar 02 00:04:25 2011 +0000
@@ -753,20 +753,20 @@
     size_tflag = 0;
 
     if (*f == 'l') {
-        if (f[1] == 'd' || f[1] == 'u') {
+        if (f[1] == 'd' || f[1] == 'u' || f[1] == 'i') {
             longflag = 1;
             ++f;
         }
 #ifdef HAVE_LONG_LONG
         else if (f[1] == 'l' &&
-                 (f[2] == 'd' || f[2] == 'u')) {
+                 (f[2] == 'd' || f[2] == 'u' || f[2] == 'i')) {
             longlongflag = 1;
             f += 2;
         }
 #endif
     }
     /* handle the size_t flag. */
-    else if (*f == 'z' && (f[1] == 'd' || f[1] == 'u')) {
+    else if (*f == 'z' && (f[1] == 'd' || f[1] == 'u' || f[1] == 'i')) {
         size_tflag = 1;
         ++f;
     }
@@ -1044,9 +1044,10 @@
                 *s++ = ordinal;
                 break;
             }
+            case 'i':
             case 'd':
                 makefmt(fmt, longflag, longlongflag, size_tflag, zeropad,
-                        width, precision, 'd');
+                        width, precision, *f);
                 if (longflag)
                     sprintf(realbuffer, fmt, va_arg(vargs, long));
 #ifdef HAVE_LONG_LONG
@@ -1075,11 +1076,6 @@
                     sprintf(realbuffer, fmt, va_arg(vargs, unsigned int));
                 appendstring(realbuffer);
                 break;
-            case 'i':
-                makefmt(fmt, 0, 0, 0, zeropad, width, precision, 'i');
-                sprintf(realbuffer, fmt, va_arg(vargs, int));
-                appendstring(realbuffer);
-                break;
             case 'x':
                 makefmt(fmt, 0, 0, 0, zeropad, width, precision, 'x');
                 sprintf(realbuffer, fmt, va_arg(vargs, int));