Piotr Caban : msvcrt: Improve printf %I format support.

Alexandre Julliard julliard at winehq.org
Mon Nov 4 16:40:24 CST 2019


Module: wine
Branch: master
Commit: 1309e11ea1c5863616de7638731d00d6ab90b295
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1309e11ea1c5863616de7638731d00d6ab90b295

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Sat Nov  2 14:39:23 2019 +0100

msvcrt: Improve printf %I format support.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/printf.h       | 6 +++---
 dlls/msvcrt/tests/printf.c | 3 +++
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/msvcrt/printf.h b/dlls/msvcrt/printf.h
index 975977087d..20bd77e792 100644
--- a/dlls/msvcrt/printf.h
+++ b/dlls/msvcrt/printf.h
@@ -509,10 +509,10 @@ int FUNC_NAME(pf_printf)(FUNC_NAME(puts_clbk) pf_puts, void *puts_ctx, const API
                     p += 3;
                 } else if(*(p+1)=='3' && *(p+2)=='2')
                     p += 3;
-                else if(isdigit(*(p+1)) || !*(p+1))
-                    break;
-                else
+                else if(p[1] && strchr("diouxX", p[1]))
                     flags.IntegerNative = *p++;
+                else
+                    break;
             } else if(*p == 'w')
                 flags.WideString = *p++;
 #if _MSVCR_VER >= 140
diff --git a/dlls/msvcrt/tests/printf.c b/dlls/msvcrt/tests/printf.c
index ac5c37a59c..d1fe292143 100644
--- a/dlls/msvcrt/tests/printf.c
+++ b/dlls/msvcrt/tests/printf.c
@@ -159,6 +159,8 @@ static void test_sprintf( void )
             " 00000000000000000000000000000000000000000000000000000000000000000000000000000001",
             0, INT_ARG, 1 },
         { "%I", "I", 0, INT_ARG, 1 },
+        { "%Iq", "Iq", 0, INT_ARG, 1 },
+        { "%Ihd", "Ihd", 0, INT_ARG, 1 },
         { "%I0d", "I0d", 0, INT_ARG, 1 },
         { "%I64D", "D", 0, ULONGLONG_ARG, 0, -1 },
         { "%zx", "1", "zx", TODO_FLAG | INT_ARG, 1 },
@@ -256,6 +258,7 @@ static void test_sprintf( void )
     int i, x, r;
 
     for (i=0; i<ARRAY_SIZE(tests); i++) {
+        memset(buffer, 'x', sizeof(buffer));
         switch(tests[i].type & 0xff) {
         case NO_ARG:
             r = p_sprintf(buffer, tests[i].format);




More information about the wine-cvs mailing list