2008-04-30 Farid Zaripov <farid_zaripov@epam.com>

	* tests/src/printf.cpp (__rw_fmtfloating): Process width and precision
	specifiers before the size specifiers.
	[_MSC_VER]: Decrement len after removing redundant zero.


git-svn-id: https://svn.apache.org/repos/asf/stdcxx/trunk@652396 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tests/src/printf.cpp b/tests/src/printf.cpp
index 872617f..7c23f8e 100644
--- a/tests/src/printf.cpp
+++ b/tests/src/printf.cpp
@@ -1424,6 +1424,13 @@
     if (spec.fl_zero)
         *pf++ = '0';
 
+    if (spec.mod != spec.mod_ext_A && 0 <= spec.width) {
+        pf += sprintf (pf, "%i", spec.width);
+    }
+
+    if (0 <= spec.prec)
+        pf += sprintf (pf, ".%i", spec.prec);
+
     if (spec.mod == spec.mod_h)
         *pf++ = 'h';
     else if (spec.mod == spec.mod_hh) {
@@ -1451,13 +1458,6 @@
         pf += strlen (pf);
     }
 
-    if (spec.mod != spec.mod_ext_A && 0 <= spec.width) {
-        pf += sprintf (pf, "%i", spec.width);
-    }
-
-    if (0 <= spec.prec)
-        pf += sprintf (pf, ".%i", spec.prec);
-
     *pf++ = char (spec.cvtspec);
     *pf   = '\0';
 
@@ -1499,6 +1499,7 @@
             buffer [len - 3] = buffer [len - 2];
             buffer [len - 2] = buffer [len - 1];
             buffer [len - 1] = buffer [len];
+            --len;
         }
     }