[PATCH 4/5] msvcrt: Implement printf_s and wprintf_s.

Eryk Wieliczko ewdevel at gmail.com
Wed Nov 24 14:25:48 CST 2010


---
 dlls/msvcr100/msvcr100.spec |    4 ++--
 dlls/msvcr80/msvcr80.spec   |    4 ++--
 dlls/msvcr90/msvcr90.spec   |    4 ++--
 dlls/msvcrt/file.c          |   26 ++++++++++++++++++++++++++
 dlls/msvcrt/msvcrt.spec     |    4 ++--
 include/msvcrt/stdio.h      |    2 ++
 include/msvcrt/wchar.h      |    1 +
 7 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 61a7121..b0b325f 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1543,7 +1543,7 @@
 @ cdecl perror(str) msvcrt.perror
 @ cdecl pow(double double) msvcrt.pow
 @ varargs printf(str) msvcrt.printf
-@ stub printf_s
+@ varargs printf_s(str) msvcrt.printf_s
 @ cdecl putc(long ptr) msvcrt.putc
 @ cdecl putchar(long) msvcrt.putchar
 @ cdecl puts(str) msvcrt.puts
@@ -1665,6 +1665,6 @@
 @ stub wmemcpy_s
 @ stub wmemmove_s
 @ varargs wprintf(wstr) msvcrt.wprintf
-@ stub wprintf_s
+@ varargs wprintf_s(wstr) msvcrt.wprintf_s
 @ varargs wscanf(wstr) msvcrt.wscanf
 @ varargs wscanf_s(wstr) msvcrt.wscanf_s
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 9823273..742144d 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1397,7 +1397,7 @@
 @ cdecl perror(str) msvcrt.perror
 @ cdecl pow(double double) msvcrt.pow
 @ varargs printf(str) msvcrt.printf
-@ stub printf_s
+@ varargs printf_s(str) msvcrt.printf_s
 @ cdecl putc(long ptr) msvcrt.putc
 @ cdecl putchar(long) msvcrt.putchar
 @ cdecl puts(str) msvcrt.puts
@@ -1517,6 +1517,6 @@
 @ cdecl wctomb(ptr long) msvcrt.wctomb
 @ stub wctomb_s
 @ varargs wprintf(wstr) msvcrt.wprintf
-@ stub wprintf_s
+@ varargs wprintf_s(wstr) msvcrt.wprintf_s
 @ varargs wscanf(wstr) msvcrt.wscanf
 @ varargs wscanf_s(wstr) msvcrt.wscanf_s
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 4f68724..3c0279f 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1381,7 +1381,7 @@
 @ cdecl perror(str) msvcrt.perror
 @ cdecl pow(double double) msvcrt.pow
 @ varargs printf(str) msvcrt.printf
-@ stub printf_s
+@ varargs printf_s(str) msvcrt.printf_s
 @ cdecl putc(long ptr) msvcrt.putc
 @ cdecl putchar(long) msvcrt.putchar
 @ cdecl puts(str) msvcrt.puts
@@ -1501,6 +1501,6 @@
 @ cdecl wctomb(ptr long) msvcrt.wctomb
 @ stub wctomb_s
 @ varargs wprintf(wstr) msvcrt.wprintf
-@ stub wprintf_s
+@ varargs wprintf_s(wstr) msvcrt.wprintf_s
 @ varargs wscanf(wstr) msvcrt.wscanf
 @ varargs wscanf_s(wstr) msvcrt.wscanf_s
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 03d4ce3..a0640ce 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -3544,6 +3544,19 @@ int CDECL MSVCRT_printf(const char *format, ...)
 }
 
 /*********************************************************************
+ *		printf_s (MSVCRT.@)
+ */
+int CDECL MSVCRT_printf_s(const char *format, ...)
+{
+    __ms_va_list valist;
+    int res;
+    __ms_va_start(valist, format);
+    res = MSVCRT_vprintf_s(format, valist);
+    __ms_va_end(valist);
+    return res;
+}
+
+/*********************************************************************
  *		ungetc (MSVCRT.@)
  */
 int CDECL MSVCRT_ungetc(int c, MSVCRT_FILE * file)
@@ -3593,6 +3606,19 @@ int CDECL MSVCRT_wprintf(const MSVCRT_wchar_t *format, ...)
 }
 
 /*********************************************************************
+ *		wprintf_s (MSVCRT.@)
+ */
+int CDECL MSVCRT_wprintf_s(const MSVCRT_wchar_t *format, ...)
+{
+    __ms_va_list valist;
+    int res;
+    __ms_va_start(valist, format);
+    res = MSVCRT_vwprintf_s(format, valist);
+    __ms_va_end(valist);
+    return res;
+}
+
+/*********************************************************************
  *		_getmaxstdio (MSVCRT.@)
  */
 int CDECL _getmaxstdio(void)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index c861643..d528e06 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1339,7 +1339,7 @@
 @ cdecl pow(double double) MSVCRT_pow
 @ cdecl -arch=x86_64 powf(float float) MSVCRT_powf
 @ varargs printf(str) MSVCRT_printf
-# stub printf_s
+@ varargs printf_s(str) MSVCRT_printf_s
 @ cdecl putc(long ptr) MSVCRT_putc
 @ cdecl putchar(long) MSVCRT_putchar
 @ cdecl puts(str) MSVCRT_puts
@@ -1470,7 +1470,7 @@
 @ cdecl wctomb(ptr long) MSVCRT_wctomb
 # stub wctomb_s
 @ varargs wprintf(wstr) MSVCRT_wprintf
-# stub wprintf_s
+@ varargs wprintf_s(wstr) MSVCRT_wprintf_s
 @ varargs wscanf(wstr) MSVCRT_wscanf
 @ varargs wscanf_s(wstr) MSVCRT_wscanf_s
 
diff --git a/include/msvcrt/stdio.h b/include/msvcrt/stdio.h
index e8c7671..31ba8ca 100644
--- a/include/msvcrt/stdio.h
+++ b/include/msvcrt/stdio.h
@@ -148,6 +148,7 @@ int    __cdecl getchar(void);
 char*  __cdecl gets(char*);
 void   __cdecl perror(const char*);
 int    __cdecl printf(const char*,...);
+int    __cdecl printf_s(const char*,...);
 int    __cdecl putc(int,FILE*);
 int    __cdecl putchar(int);
 int    __cdecl puts(const char*);
@@ -220,6 +221,7 @@ int      __cdecl vswprintf_s(wchar_t*,size_t,const wchar_t*,__ms_va_list);
 int      __cdecl vwprintf(const wchar_t*,__ms_va_list);
 int      __cdecl vwprintf_s(const wchar_t*,__ms_va_list);
 int      __cdecl wprintf(const wchar_t*,...);
+int      __cdecl wprintf_s(const wchar_t*,...);
 int      __cdecl wscanf(const wchar_t*,...);
 int      __cdecl wscanf_s(const wchar_t*,...);
 #endif /* _WSTDIO_DEFINED */
diff --git a/include/msvcrt/wchar.h b/include/msvcrt/wchar.h
index d0a6a37..e753e3f 100644
--- a/include/msvcrt/wchar.h
+++ b/include/msvcrt/wchar.h
@@ -316,6 +316,7 @@ int      __cdecl vswprintf_s(wchar_t*,size_t,const wchar_t*,__ms_va_list);
 int      __cdecl vwprintf(const wchar_t*,__ms_va_list);
 int      __cdecl vwprintf_s(const wchar_t*,__ms_va_list);
 int      __cdecl wprintf(const wchar_t*,...);
+int      __cdecl wprintf_s(const wchar_t*,...);
 int      __cdecl wscanf(const wchar_t*,...);
 int      __cdecl wscanf_s(const wchar_t*,...);
 #endif /* _WSTDIO_DEFINED */
-- 
1.7.0.4




More information about the wine-patches mailing list