fixing some bugs for %c in the string version of printf
authorMagnus Olsen <magnus@greatlord.com>
Tue, 6 Jun 2006 23:01:44 +0000 (23:01 +0000)
committerMagnus Olsen <magnus@greatlord.com>
Tue, 6 Jun 2006 23:01:44 +0000 (23:01 +0000)
svn path=/trunk/; revision=22257

reactos/lib/rtl/sprintf.c
reactos/lib/rtl/swprintf.c

index c258476..5d9c53a 100644 (file)
@@ -477,27 +477,20 @@ int _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args)
 \r
                switch (*fmt) {\r
                case 'c': /* finished */\r
-                       if (!(flags & LEFT))\r
-                               while (--field_width > 0) {\r
-                                       if (str <= end)\r
-                                               *str = ' ';\r
-                                       ++str;\r
-                               }\r
-                       if (qualifier == 'l' || qualifier == 'w') {\r
-                               if (str <= end)\r
-                                       *str = (unsigned char)(wchar_t) va_arg(args, int);\r
-                               ++str;\r
+             if (qualifier == 'l' || qualifier == 'w') {    \r
+                     wchar_t sw1[2];\r
+                               /* print unicode string */\r
+                sw1[0] = (wchar_t) va_arg(args, int);\r
+                sw1[1] = 0;\r
+                               str = stringw(str, end, (wchar_t *)&sw1, -1, field_width, precision, flags);\r
                        } else {\r
-                               if (str <= end)\r
-                                       *str = (unsigned char) va_arg(args, int);\r
-                               ++str;\r
-                       }\r
-                       while (--field_width > 0) {\r
-                               if (str <= end)\r
-                                       *str = ' ';\r
-                               ++str;\r
+                char s1[2];\r
+                               /* print ascii string */\r
+                s1[0] = ( unsigned char) va_arg(args, int);\r
+                s1[1] = 0;\r
+                               str = string(str, end, (char *)&s1, -1,  field_width, precision, flags);\r
                        }\r
-                       continue;\r
+            continue;\r
 \r
                case 'C': /* finished */\r
                        if (!(flags & LEFT))\r
index 33f5ac4..bef6e91 100644 (file)
@@ -475,26 +475,20 @@ int _vsnwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, va_list args)
 \r
                switch (*fmt) {\r
                case L'c':\r
-                       if (!(flags & LEFT))\r
-                               while (--field_width > 0) {\r
-                                       if (str <= end)\r
-                                               *str = L' ';\r
-                                       ++str;\r
-                               }\r
-                       if (qualifier == 'h') {\r
-                               if (str <= end)\r
-                                       *str = (wchar_t) va_arg(args, int);\r
-                               ++str;\r
+              if (qualifier == 'h' || qualifier == 'w') {    \r
+                     wchar_t sw1[2];\r
+                               /* print unicode string */\r
+                sw1[0] = (wchar_t) va_arg(args, int);\r
+                sw1[1] = 0;\r
+                               str = stringw(str, end, (wchar_t *)&sw1, -1, field_width, precision, flags);\r
                        } else {\r
-                               if (str <= end)\r
-                                       *str = (wchar_t) va_arg(args, int);\r
-                               ++str;\r
-                       }\r
-                       while (--field_width > 0) {\r
-                               if (str <= end)\r
-                                       *str = L' ';\r
-                               ++str;\r
+                char s1[2];\r
+                               /* print ascii string */\r
+                s1[0] = ( unsigned char) va_arg(args, int);\r
+                s1[1] = 0;\r
+                               str = string(str, end, (char *)&s1, -1,  field_width, precision, flags);\r
                        }\r
+               \r
                        continue;\r
 \r
                case L'C':\r