From 0f9f0a16135a8a98ba71d8c62e3ffff01b2cff2e Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 27 Apr 2011 12:09:27 +0200 Subject: [PATCH] msvcrt: Don't use additional buffer in pf_integer_conv. --- dlls/msvcrt/printf.h | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/dlls/msvcrt/printf.h b/dlls/msvcrt/printf.h index 7513605a110..c3884ab6df3 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)