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