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