Alexandre Julliard : ntdll: Add a few printf functions.
Alexandre Julliard
julliard at winehq.org
Tue May 12 16:59:27 CDT 2020
Module: wine
Branch: master
Commit: f44e90d284d07140c4a33e16ed69a6abb8bd49e0
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f44e90d284d07140c4a33e16ed69a6abb8bd49e0
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue May 12 13:33:09 2020 +0200
ntdll: Add a few printf functions.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/ntdll.spec | 12 +++++--
dlls/ntdll/printf.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 103 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index b19b334bb4..46597317f5 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -1444,8 +1444,10 @@
@ cdecl _memccpy(ptr ptr long long)
@ cdecl _memicmp(str str long)
@ varargs _snprintf(ptr long str) NTDLL__snprintf
-@ varargs _snprintf_s(ptr long long str) _snprintf_s
+@ varargs _snprintf_s(ptr long long str)
@ varargs _snwprintf(ptr long wstr) NTDLL__snwprintf
+@ varargs _snwprintf_s(ptr long long wstr)
+@ varargs _swprintf(ptr wstr) NTDLL_swprintf
@ cdecl _splitpath(str ptr ptr ptr ptr)
@ cdecl _strcmpi(str str) _stricmp
@ cdecl _stricmp(str str)
@@ -1459,8 +1461,10 @@
@ cdecl _ultoa(long ptr long)
@ cdecl _ultow(long ptr long)
@ cdecl -norelay _vsnprintf(ptr long str ptr) NTDLL__vsnprintf
-@ cdecl _vsnprintf_s(ptr long str ptr) _vsnprintf_s
+@ cdecl _vsnprintf_s(ptr long str ptr)
@ cdecl _vsnwprintf(ptr long wstr ptr) NTDLL__vsnwprintf
+@ cdecl _vsnwprintf_s(ptr long long wstr ptr)
+@ cdecl _vswprintf(ptr wstr ptr) NTDLL__vswprintf
@ cdecl _wcsicmp(wstr wstr) NTDLL__wcsicmp
@ cdecl _wcslwr(wstr) NTDLL__wcslwr
@ cdecl _wcsnicmp(wstr wstr long) NTDLL__wcsnicmp
@@ -1506,6 +1510,7 @@
@ cdecl qsort(ptr long long ptr) NTDLL_qsort
@ cdecl sin(double) NTDLL_sin
@ varargs sprintf(ptr str) NTDLL_sprintf
+@ varargs sprintf_s(ptr long str)
@ cdecl sqrt(double) NTDLL_sqrt
@ varargs sscanf(str str) NTDLL_sscanf
@ cdecl strcat(str str) NTDLL_strcat
@@ -1525,6 +1530,7 @@
@ cdecl strtol(str ptr long) NTDLL_strtol
@ cdecl strtoul(str ptr long) NTDLL_strtoul
@ varargs swprintf(ptr wstr) NTDLL_swprintf
+@ varargs swprintf_s(ptr long wstr)
@ cdecl tan(double) NTDLL_tan
@ cdecl tolower(long) NTDLL_tolower
@ cdecl toupper(long) NTDLL_toupper
@@ -1533,6 +1539,8 @@
@ stdcall vDbgPrintEx(long long str ptr)
@ stdcall vDbgPrintExWithPrefix(str long long str ptr)
@ cdecl vsprintf(ptr str ptr) NTDLL_vsprintf
+@ cdecl vsprintf_s(ptr long str ptr)
+@ cdecl vswprintf_s(ptr long wstr ptr)
@ cdecl wcscat(wstr wstr) NTDLL_wcscat
@ cdecl wcschr(wstr long) NTDLL_wcschr
@ cdecl wcscmp(wstr wstr) NTDLL_wcscmp
diff --git a/dlls/ntdll/printf.c b/dlls/ntdll/printf.c
index 309a25f7e4..96c258e91b 100644
--- a/dlls/ntdll/printf.c
+++ b/dlls/ntdll/printf.c
@@ -798,6 +798,27 @@ int CDECL _vsnprintf_s( char *str, SIZE_T size, SIZE_T len, const char *format,
}
+/***********************************************************************
+ * _vsnwprintf_s (NTDLL.@)
+ */
+int CDECL _vsnwprintf_s( WCHAR *str, SIZE_T size, SIZE_T len, const WCHAR *format, __ms_va_list args )
+{
+ pf_output out;
+ int r;
+
+ out.unicode = TRUE;
+ out.buf.W = str;
+ out.used = 0;
+ out.len = min( size, len );
+
+ r = pf_vsnprintf( &out, format, args );
+ if (out.used < size) str[out.used] = 0;
+ else str[0] = 0;
+ if (r == size) r = -1;
+ return r;
+}
+
+
/*********************************************************************
* _snprintf_s (NTDLL.@)
*/
@@ -813,6 +834,21 @@ int WINAPIV _snprintf_s( char *str, SIZE_T size, SIZE_T len, const char *format,
}
+/*********************************************************************
+ * _snwprintf_s (NTDLL.@)
+ */
+int WINAPIV _snwprintf_s( WCHAR *str, SIZE_T size, SIZE_T len, const WCHAR *format, ... )
+{
+ int ret;
+ __ms_va_list valist;
+
+ __ms_va_start( valist, format );
+ ret = _vsnwprintf_s( str, size, len, format, valist );
+ __ms_va_end( valist );
+ return ret;
+}
+
+
/*********************************************************************
* vsprintf (NTDLL.@)
*/
@@ -822,6 +858,33 @@ int CDECL NTDLL_vsprintf( char *str, const char *format, __ms_va_list args )
}
+/*********************************************************************
+ * vsprintf_s (NTDLL.@)
+ */
+int CDECL vsprintf_s( char *str, SIZE_T size, const char *format, __ms_va_list args )
+{
+ return _vsnprintf_s( str, size, size, format, args );
+}
+
+
+/*********************************************************************
+ * _vswprintf (NTDLL.@)
+ */
+int CDECL NTDLL__vswprintf( WCHAR *str, const WCHAR *format, __ms_va_list args )
+{
+ return NTDLL__vsnwprintf( str, size_max, format, args );
+}
+
+
+/*********************************************************************
+ * vswprintf_s (NTDLL.@)
+ */
+int CDECL vswprintf_s( WCHAR *str, SIZE_T size, const WCHAR *format, __ms_va_list args )
+{
+ return _vsnwprintf_s( str, size, size, format, args );
+}
+
+
/*********************************************************************
* sprintf (NTDLL.@)
*/
@@ -837,6 +900,21 @@ int WINAPIV NTDLL_sprintf( char *str, const char *format, ... )
}
+/*********************************************************************
+ * sprintf_s (NTDLL.@)
+ */
+int WINAPIV sprintf_s( char *str, SIZE_T size, const char *format, ... )
+{
+ int ret;
+ __ms_va_list valist;
+
+ __ms_va_start( valist, format );
+ ret = vsprintf_s( str, size, format, valist );
+ __ms_va_end( valist );
+ return ret;
+}
+
+
/***********************************************************************
* swprintf (NTDLL.@)
*/
@@ -850,3 +928,18 @@ int WINAPIV NTDLL_swprintf( WCHAR *str, const WCHAR *format, ... )
__ms_va_end(valist);
return ret;
}
+
+
+/***********************************************************************
+ * swprintf_s (NTDLL.@)
+ */
+int WINAPIV swprintf_s( WCHAR *str, SIZE_T size, const WCHAR *format, ... )
+{
+ int ret;
+ __ms_va_list valist;
+
+ __ms_va_start(valist, format);
+ ret = vswprintf_s( str, size, format, valist );
+ __ms_va_end(valist);
+ return ret;
+}
More information about the wine-cvs
mailing list