Module: wine Branch: master Commit: bbe9c51b31e8a5d7f91853350552e63ffc638de0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bbe9c51b31e8a5d7f918533505...
Author: Michael Stefaniuc mstefani@redhat.de Date: Mon Jan 29 23:53:46 2007 +0100
msvcrt: Fix *printf() handling of negative field width.
---
dlls/msvcrt/tests/printf.c | 5 +++++ dlls/msvcrt/wcs.c | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/dlls/msvcrt/tests/printf.c b/dlls/msvcrt/tests/printf.c index 53d88f4..23cc5c8 100644 --- a/dlls/msvcrt/tests/printf.c +++ b/dlls/msvcrt/tests/printf.c @@ -279,6 +279,11 @@ static void test_sprintf( void ) ok(!strcmp(buffer,"f"),"Precision ignored "%s"\n",buffer); ok( r==1, "return count wrong\n");
+ format = "%*s"; + r = sprintf(buffer,format,-5,"foo"); + ok(!strcmp(buffer,"foo "),"Negative field width ignored "%s"\n",buffer); + ok( r==5, "return count wrong\n"); + format = "%#-012p"; r = sprintf(buffer,format,(void *)57); ok(!strcmp(buffer,"0X00000039 "),"Pointer formatted incorrectly\n"); diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index ad3887f..32668a3 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -568,9 +568,14 @@ static int pf_vsnprintf( pf_output *out,
/* deal with the field width specifier */ flags.FieldLength = 0; - if( *p == '*' ) + if( *p == '*' ) { flags.FieldLength = va_arg( valist, int ); + if (flags.FieldLength < 0) + { + flags.LeftAlign = '-'; + flags.FieldLength = -flags.FieldLength; + } p++; } else while( isdigit(*p) )