From 6c70942a057644e926367a68486bc96222f1d573 Mon Sep 17 00:00:00 2001 From: Jesse Allen Date: Mon, 26 Dec 2005 13:00:01 +0100 Subject: [PATCH] msvcrt: Parse I, I32, and I64 integer size flags in printf. --- dlls/msvcrt/tests/printf.c | 15 +++++++++++++++ dlls/msvcrt/wcs.c | 14 ++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/dlls/msvcrt/tests/printf.c b/dlls/msvcrt/tests/printf.c index d96c61ec348..28ddf491f2a 100644 --- a/dlls/msvcrt/tests/printf.c +++ b/dlls/msvcrt/tests/printf.c @@ -56,6 +56,21 @@ static void test_sprintf( void ) ok(!strcmp(buffer, "I"), "Problem with \"I\" interpretation\n"); ok( r==1, "return count wrong\n"); + format = "%I0d"; + r = sprintf(buffer,format,1); + ok(!strcmp(buffer,"I0d"),"I0d failed\n"); + ok( r==3, "return count wrong\n"); + + format = "%I32d"; + r = sprintf(buffer,format,1); + ok(!strcmp(buffer,"1"),"I32d failed\n"); + ok( r==1, "return count wrong\n"); + + format = "%I64D"; + r = sprintf(buffer,format,(LONGLONG)-1); + ok(!strcmp(buffer,"D"),"I64D failed: %s\n",buffer); + ok( r==1, "return count wrong\n"); + format = "% d"; r = sprintf(buffer,format,1); ok(!strcmp(buffer, " 1"),"Problem with sign place-holder: '%s'\n",buffer); diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 83a713e7aa6..5ef929b3929 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -495,6 +495,20 @@ static int pf_vsnprintf( pf_output *out, const WCHAR *format, va_list valist ) flags.IntegerLength = *p; p++; } + else if( *p == 'I' ) + { + if( *(p+1) == '6' && *(p+2) == '4' ) + { + flags.IntegerDouble++; + p += 3; + } + else if( *(p+1) == '3' && *(p+2) == '2' ) + p += 3; + else if( isdigit(*(p+1)) || *(p+1) == 0 ) + break; + else + p++; + } else if( *p == 'w' ) flags.WideString = *p++; else if( *p == 'F' ) -- 2.11.4.GIT