From 8b6eada458a632e443d653da23f997840ffa5d8c Mon Sep 17 00:00:00 2001 From: Alex Henrie Date: Fri, 13 Oct 2017 20:11:24 +0200 Subject: [PATCH] ucrtbase: Add __stdio_common_vsprintf_p. Signed-off-by: Alex Henrie Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- .../api-ms-win-crt-stdio-l1-1-0.spec | 2 +- dlls/msvcrt/wcs.c | 33 ++++++++++++++----- dlls/ucrtbase/ucrtbase.spec | 2 +- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/dlls/api-ms-win-crt-stdio-l1-1-0/api-ms-win-crt-stdio-l1-1-0.spec b/dlls/api-ms-win-crt-stdio-l1-1-0/api-ms-win-crt-stdio-l1-1-0.spec index 98bb853a22c..4921883e05c 100644 --- a/dlls/api-ms-win-crt-stdio-l1-1-0/api-ms-win-crt-stdio-l1-1-0.spec +++ b/dlls/api-ms-win-crt-stdio-l1-1-0/api-ms-win-crt-stdio-l1-1-0.spec @@ -12,7 +12,7 @@ @ cdecl __stdio_common_vsnprintf_s(int64 ptr long long str ptr ptr) ucrtbase.__stdio_common_vsnprintf_s @ cdecl __stdio_common_vsnwprintf_s(int64 ptr long long wstr ptr ptr) ucrtbase.__stdio_common_vsnwprintf_s @ cdecl __stdio_common_vsprintf(int64 ptr long str ptr ptr) ucrtbase.__stdio_common_vsprintf -@ stub __stdio_common_vsprintf_p +@ cdecl __stdio_common_vsprintf_p(int64 ptr long str ptr ptr) ucrtbase.__stdio_common_vsprintf_p @ cdecl __stdio_common_vsprintf_s(int64 ptr long str ptr ptr) ucrtbase.__stdio_common_vsprintf_s @ cdecl __stdio_common_vsscanf(int64 ptr long str ptr ptr) ucrtbase.__stdio_common_vsscanf @ cdecl __stdio_common_vswprintf(int64 ptr long wstr ptr ptr) ucrtbase.__stdio_common_vswprintf diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index cd87f211cb7..cffd5a9114a 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -1447,11 +1447,8 @@ int CDECL MSVCRT_vswprintf_s_l(MSVCRT_wchar_t* str, MSVCRT_size_t numberOfElemen format, locale, args ); } -/********************************************************************* - * _vsprintf_p_l (MSVCRT.@) - */ -int CDECL MSVCRT_vsprintf_p_l(char *buffer, MSVCRT_size_t length, const char *format, - MSVCRT__locale_t locale, __ms_va_list args) +static int MSVCRT_vsprintf_p_l_opt(char *buffer, MSVCRT_size_t length, const char *format, + DWORD options, MSVCRT__locale_t locale, __ms_va_list args) { static const char nullbyte = '\0'; printf_arg args_ctx[MSVCRT__ARGMAX+1]; @@ -1466,17 +1463,26 @@ int CDECL MSVCRT_vsprintf_p_l(char *buffer, MSVCRT_size_t length, const char *fo *MSVCRT__errno() = MSVCRT_EINVAL; return ret; } else if(ret == 0) - ret = pf_printf_a(puts_clbk_str_a, &puts_ctx, format, locale, MSVCRT_PRINTF_INVOKE_INVALID_PARAM_HANDLER, - arg_clbk_valist, NULL, &args); + ret = pf_printf_a(puts_clbk_str_a, &puts_ctx, format, locale, + MSVCRT_PRINTF_INVOKE_INVALID_PARAM_HANDLER | options, arg_clbk_valist, NULL, &args); else ret = pf_printf_a(puts_clbk_str_a, &puts_ctx, format, locale, - MSVCRT_PRINTF_POSITIONAL_PARAMS | MSVCRT_PRINTF_INVOKE_INVALID_PARAM_HANDLER, + MSVCRT_PRINTF_POSITIONAL_PARAMS | MSVCRT_PRINTF_INVOKE_INVALID_PARAM_HANDLER | options, arg_clbk_positional, args_ctx, NULL); puts_clbk_str_a(&puts_ctx, 1, &nullbyte); return ret; } +/********************************************************************* + * _vsprintf_p_l (MSVCRT.@) + */ +int CDECL MSVCRT_vsprintf_p_l(char *buffer, MSVCRT_size_t length, const char *format, + MSVCRT__locale_t locale, __ms_va_list args) +{ + return MSVCRT_vsprintf_p_l_opt(buffer, length, format, 0, locale, args); +} + /********************************************************************* * _vsprintf_p (MSVCRT.@) */ @@ -1486,6 +1492,17 @@ int CDECL MSVCRT_vsprintf_p(char *buffer, MSVCRT_size_t length, return MSVCRT_vsprintf_p_l(buffer, length, format, NULL, args); } +/********************************************************************* + * __stdio_common_vsprintf_p (UCRTBASE.@) + */ +int CDECL MSVCRT__stdio_common_vsprintf_p(unsigned __int64 options, char *buffer, MSVCRT_size_t length, + const char *format, MSVCRT__locale_t locale, __ms_va_list args) +{ + if (options & ~UCRTBASE_PRINTF_MASK) + FIXME("options %s not handled\n", wine_dbgstr_longlong(options)); + return MSVCRT_vsprintf_p_l_opt(buffer, length, format, options & UCRTBASE_PRINTF_MASK, locale, args); +} + /********************************************************************* * _sprintf_p_l (MSVCRT.@) */ diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 2b0f6fa5739..5495746827e 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -157,7 +157,7 @@ @ cdecl __stdio_common_vsnprintf_s(int64 ptr long long str ptr ptr) MSVCRT__stdio_common_vsnprintf_s @ cdecl __stdio_common_vsnwprintf_s(int64 ptr long long wstr ptr ptr) MSVCRT__stdio_common_vsnwprintf_s @ cdecl __stdio_common_vsprintf(int64 ptr long str ptr ptr) MSVCRT__stdio_common_vsprintf -@ stub __stdio_common_vsprintf_p +@ cdecl __stdio_common_vsprintf_p(int64 ptr long str ptr ptr) MSVCRT__stdio_common_vsprintf_p @ cdecl __stdio_common_vsprintf_s(int64 ptr long str ptr ptr) MSVCRT__stdio_common_vsprintf_s @ cdecl __stdio_common_vsscanf(int64 ptr long str ptr ptr) MSVCRT__stdio_common_vsscanf @ cdecl __stdio_common_vswprintf(int64 ptr long wstr ptr ptr) MSVCRT__stdio_common_vswprintf