Module: wine Branch: master Commit: c60b21926ef2966835483d7f06202e33569c091f URL: https://source.winehq.org/git/wine.git/?a=commit;h=c60b21926ef2966835483d7f0...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Feb 18 15:21:29 2020 +0100
stdio.h: Add ucrt version of vsnprintf inline wrapper.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/vcruntime140/misc.c | 10 ---------- include/msvcrt/stdio.h | 27 +++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/dlls/vcruntime140/misc.c b/dlls/vcruntime140/misc.c index 028bde5b3d..cc64175438 100644 --- a/dlls/vcruntime140/misc.c +++ b/dlls/vcruntime140/misc.c @@ -22,10 +22,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(vcruntime);
-#define UCRTBASE_PRINTF_STANDARD_SNPRINTF_BEHAVIOUR (0x0002) -int __cdecl __stdio_common_vsprintf(unsigned __int64 options, char *str, size_t len, const char *format, - _locale_t locale, __ms_va_list valist); - int* CDECL __processing_throw(void);
/********************************************************************* @@ -58,9 +54,3 @@ int __cdecl __uncaught_exceptions(void) { return *__processing_throw(); } - -int __cdecl _vsnprintf( char *buf, size_t size, const char *fmt, __ms_va_list args ) -{ - return __stdio_common_vsprintf( UCRTBASE_PRINTF_STANDARD_SNPRINTF_BEHAVIOUR, - buf, size, fmt, NULL, args ); -} diff --git a/include/msvcrt/stdio.h b/include/msvcrt/stdio.h index 2a66f008fa..7477ac171a 100644 --- a/include/msvcrt/stdio.h +++ b/include/msvcrt/stdio.h @@ -95,7 +95,6 @@ char* __cdecl _tempnam(const char*,const char*); int __cdecl _unlink(const char*); int WINAPIV _scprintf(const char*,...); int __cdecl _vscprintf(const char*,__ms_va_list); -int __cdecl _vsnprintf(char*,size_t,const char*,__ms_va_list); int __cdecl _vsnprintf_s(char*,size_t,size_t,const char*,__ms_va_list); int __cdecl _vsprintf_p_l(char*,size_t,const char*,_locale_t,__ms_va_list);
@@ -173,6 +172,31 @@ int __cdecl vsprintf_s(char*,size_t,const char*,__ms_va_list); unsigned int __cdecl _get_output_format(void); unsigned int __cdecl _set_output_format(void);
+#ifdef _UCRT + +_ACRTIMP int __cdecl __stdio_common_vsprintf(unsigned __int64,char*,size_t,const char*,_locale_t,__ms_va_list); + +static inline int __cdecl vsnprintf(char *buffer, size_t size, const char *format, __ms_va_list args) +{ + int ret = __stdio_common_vsprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, + buffer, size, format, NULL, args); + return ret < 0 ? -1 : ret; +} + +static inline int __cdecl _vsnprintf(char *buffer, size_t size, const char *format, __ms_va_list args) +{ + int ret = __stdio_common_vsprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, + buffer, size, format, NULL, args); + return ret < 0 ? -1 : ret; +} + +#else /* _UCRT */ + +int __cdecl _vsnprintf(char*,size_t,const char*,__ms_va_list); +static inline int vsnprintf(char *buffer, size_t size, const char *format, __ms_va_list args) { return _vsnprintf(buffer,size,format,args); } + +#endif /* _UCRT */ + #endif /* _STDIO_DEFINED */
#ifdef __cplusplus @@ -191,7 +215,6 @@ static inline char* tempnam(const char *dir, const char *prefix) { return _tempn static inline int unlink(const char* path) { return _unlink(path); } #define _UNLINK_DEFINED #endif -static inline int vsnprintf(char *buffer, size_t size, const char *format, __ms_va_list args) { return _vsnprintf(buffer,size,format,args); }
static inline int WINAPIV snprintf(char *buffer, size_t size, const char *format, ...) {