Piotr Caban : msvcrt: Don't use additional buffer in pf_integer_conv.

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


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

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

msvcrt: Don't use additional buffer in pf_integer_conv.

---

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

diff --git a/dlls/msvcrt/printf.h b/dlls/msvcrt/printf.h
index 7513605..c3884ab 100644
--- a/dlls/msvcrt/printf.h
+++ b/dlls/msvcrt/printf.h
@@ -254,12 +254,9 @@ static inline void FUNC_NAME(pf_integer_conv)(char *buf, int buf_len,
 {
     unsigned int base;
     const char *digits;
+    char tmp;
 
     int i, j, k;
-    char number[40], *tmp = number;
-
-    if(buf_len > sizeof number)
-        tmp = HeapAlloc(GetProcessHeap(), 0, buf_len);
 
     if(flags->Format == 'o')
         base = 8;
@@ -280,35 +277,36 @@ static inline void FUNC_NAME(pf_integer_conv)(char *buf, int buf_len,
 
     i = 0;
     if(x==0 && flags->Precision)
-        tmp[i++] = '0';
+        buf[i++] = '0';
     else {
         while(x != 0) {
             j = (ULONGLONG)x%base;
             x = (ULONGLONG)x/base;
-            tmp[i++] = digits[j];
+            buf[i++] = digits[j];
         }
     }
     k = flags->Precision-i;
     while(k-- > 0)
-        tmp[i++] = '0';
+        buf[i++] = '0';
     if(flags->Alternate) {
         if(base == 16) {
-            tmp[i++] = digits[16];
-            tmp[i++] = '0';
-        } else if(base==8 && tmp[i-1]!='0')
-            tmp[i++] = '0';
+            buf[i++] = digits[16];
+            buf[i++] = '0';
+        } else if(base==8 && buf[i-1]!='0')
+            buf[i++] = '0';
     }
 
+    buf[i] = '\0';
     j = 0;
-    while(i-- > 0)
-        buf[j++] = tmp[i];
-    buf[j] = '\0';
+    while(i-- > j) {
+        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);
-
-    if(tmp != number)
-        HeapFree(GetProcessHeap(), 0, tmp);
 }
 
 static inline void FUNC_NAME(pf_fixup_exponent)(char *buf)




More information about the wine-cvs mailing list