Piotr Caban : msvcrt: Remove wchar_t/ char conversions needed for pf_integer_conv.

Alexandre Julliard julliard at winehq.org
Wed Apr 27 12:47:27 CDT 2011


Module: wine
Branch: master
Commit: 10901e17b4107eacd5cc06e3a8296feb4ed51d27
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=10901e17b4107eacd5cc06e3a8296feb4ed51d27

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Apr 27 12:09:51 2011 +0200

msvcrt: Remove wchar_t/char conversions needed for pf_integer_conv.

---

 dlls/msvcrt/printf.h |   36 +++++++++++++++++++++---------------
 1 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/dlls/msvcrt/printf.h b/dlls/msvcrt/printf.h
index 93a8d43..0198756 100644
--- a/dlls/msvcrt/printf.h
+++ b/dlls/msvcrt/printf.h
@@ -249,13 +249,11 @@ static inline void FUNC_NAME(pf_rebuild_format_string)(char *p, FUNC_NAME(pf_fla
 
 /* pf_integer_conv:  prints x to buf, including alternate formats and
    additional precision digits, but not field characters or the sign */
-static inline void FUNC_NAME(pf_integer_conv)(char *buf, int buf_len,
+static inline void FUNC_NAME(pf_integer_conv)(APICHAR *buf, int buf_len,
         FUNC_NAME(pf_flags) *flags, LONGLONG x)
 {
     unsigned int base;
     const char *digits;
-    char tmp;
-
     int i, j, k;
 
     if(flags->Format == 'o')
@@ -296,17 +294,17 @@ static inline void FUNC_NAME(pf_integer_conv)(char *buf, int buf_len,
             buf[i++] = '0';
     }
 
+    /* Adjust precision so pf_fill won't truncate the number later */
+    flags->Precision = i;
+
     buf[i] = '\0';
     j = 0;
-    while(i-- > j) {
-        tmp = buf[j];
+    while(--i > j) {
+        APICHAR tmp = buf[j];
         buf[j] = buf[i];
         buf[i] = tmp;
         j++;
     }
-
-    /* Adjust precision so pf_fill won't truncate the number later */
-    flags->Precision = strlen(buf);
 }
 
 static inline void FUNC_NAME(pf_fixup_exponent)(char *buf)
@@ -342,9 +340,9 @@ int FUNC_NAME(pf_printf)(FUNC_NAME(puts_clbk) pf_puts, void *puts_ctx, const API
         args_clbk pf_args, void *args_ctx, __ms_va_list valist)
 {
     const APICHAR *q, *p = fmt;
+    APICHAR buf[32];
     int written = 0, pos, i;
     FUNC_NAME(pf_flags) flags;
-    char buf[32];
 
     TRACE("Format is: %s\n", FUNC_NAME(debugstr)(fmt));
 
@@ -482,21 +480,25 @@ int FUNC_NAME(pf_printf)(FUNC_NAME(puts_clbk) pf_puts, void *puts_ctx, const API
             flags.PadZero = '0';
             i = flags.Precision;
             flags.Precision = 2*sizeof(void*);
-            FUNC_NAME(pf_integer_conv)(buf, sizeof(buf), &flags,
+            FUNC_NAME(pf_integer_conv)(buf, sizeof(buf)/sizeof(APICHAR), &flags,
                     pf_args(args_ctx, pos, VT_INT, &valist).get_int);
             flags.PadZero = 0;
             flags.Precision = i;
 
+#ifdef PRINTF_WIDE
+            i = FUNC_NAME(pf_output_format_wstr)(pf_puts, puts_ctx, buf, -1, &flags, locale);
+#else
             i = FUNC_NAME(pf_output_format_str)(pf_puts, puts_ctx, buf, -1, &flags, locale);
+#endif
         } else if(flags.Format == 'n') {
             int *used = pf_args(args_ctx, pos, VT_PTR, &valist).get_ptr;
             *used = written;
             i = 0;
         } else if(flags.Format && strchr("diouxX", flags.Format)) {
-            char *tmp = buf;
+            APICHAR *tmp = buf;
             int max_len = (flags.FieldLength>flags.Precision ? flags.FieldLength : flags.Precision) + 10;
 
-            if(max_len > sizeof(buf))
+            if(max_len > sizeof(buf)/sizeof(APICHAR))
                 tmp = HeapAlloc(GetProcessHeap(), 0, max_len);
             if(!tmp)
                 return -1;
@@ -511,14 +513,18 @@ int FUNC_NAME(pf_printf)(FUNC_NAME(puts_clbk) pf_puts, void *puts_ctx, const API
                 FUNC_NAME(pf_integer_conv)(tmp, max_len, &flags, (unsigned)pf_args(
                             args_ctx, pos, VT_INT, &valist).get_int);
 
+#ifdef PRINTF_WIDE
+            i = FUNC_NAME(pf_output_format_wstr)(pf_puts, puts_ctx, tmp, -1, &flags, locale);
+#else
             i = FUNC_NAME(pf_output_format_str)(pf_puts, puts_ctx, tmp, -1, &flags, locale);
+#endif
             if(tmp != buf)
                 HeapFree(GetProcessHeap(), 0, tmp);
         } else if(flags.Format && strchr("aeEfgG", flags.Format)) {
-            char fmt[20], *tmp = buf, *decimal_point;
+            char fmt[20], buf_a[32], *tmp = buf_a, *decimal_point;
             int max_len = (flags.FieldLength>flags.Precision ? flags.FieldLength : flags.Precision) + 10;
 
-            if(max_len > sizeof(buf))
+            if(max_len > sizeof(buf_a))
                 tmp = HeapAlloc(GetProcessHeap(), 0, max_len);
             if(!tmp)
                 return -1;
@@ -534,7 +540,7 @@ int FUNC_NAME(pf_printf)(FUNC_NAME(puts_clbk) pf_puts, void *puts_ctx, const API
                 *decimal_point = *locale->locinfo->lconv->decimal_point;
 
             i = FUNC_NAME(pf_output_str)(pf_puts, puts_ctx, tmp, strlen(tmp), locale);
-            if(tmp != buf)
+            if(tmp != buf_a)
                 HeapFree(GetProcessHeap(), 0, tmp);
         } else {
             if(invoke_invalid_param_handler) {




More information about the wine-cvs mailing list