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