msvcrt: Fix printf sign flags.
Fix the printf sign flags so that '+' doesn't always override ' '
space alone. If they both appear, continue parsing and let '+' take
precedence.
diff --git a/dlls/msvcrt/tests/printf.c b/dlls/msvcrt/tests/printf.c
index 3979a95..d96c61e 100644
--- a/dlls/msvcrt/tests/printf.c
+++ b/dlls/msvcrt/tests/printf.c
@@ -56,6 +56,16 @@
ok(!strcmp(buffer, "I"), "Problem with \"I\" interpretation\n");
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);
+ ok( r==2, "return count wrong\n");
+
+ format = "%+ d";
+ r = sprintf(buffer,format,1);
+ ok(!strcmp(buffer, "+1"),"Problem with sign flags: '%s'\n",buffer);
+ ok( r==2, "return count wrong\n");
+
format = "%S";
r = sprintf(buffer,format,wide);
ok(!strcmp(buffer,"wide"),"Problem with wide string format\n");
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index efb93d8..83a713e 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -438,7 +438,10 @@
while (*p)
{
if( *p == '+' || *p == ' ' )
- flags.Sign = '+';
+ {
+ if ( flags.Sign != '+' )
+ flags.Sign = *p;
+ }
else if( *p == '-' )
flags.LeftAlign = *p;
else if( *p == '0' )