Piotr Caban : msvcrt: Add _vscprintf_p implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jan 20 15:20:10 CST 2015
Module: wine
Branch: master
Commit: bd1428ef50a49b2f99505e9be39c24faf0a33c1d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bd1428ef50a49b2f99505e9be39c24faf0a33c1d
Author: Piotr Caban <piotr at codeweavers.com>
Date: Tue Jan 20 13:43:09 2015 +0100
msvcrt: Add _vscprintf_p implementation.
---
dlls/msvcr100/msvcr100.spec | 4 ++--
dlls/msvcr110/msvcr110.spec | 4 ++--
dlls/msvcr120/msvcr120.spec | 4 ++--
dlls/msvcr120_app/msvcr120_app.spec | 4 ++--
dlls/msvcr80/msvcr80.spec | 4 ++--
dlls/msvcr90/msvcr90.spec | 4 ++--
dlls/msvcrt/msvcrt.spec | 2 +-
dlls/msvcrt/wcs.c | 36 ++++++++++++++++++++++++++++++++++++
8 files changed, 49 insertions(+), 13 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 29cbe7f..c1eb594 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1446,8 +1446,8 @@
@ stub _vprintf_s_l
@ cdecl _vscprintf(str ptr) MSVCRT__vscprintf
@ stub _vscprintf_l
-@ stub _vscprintf_p
-@ stub _vscprintf_p_l
+@ cdecl _vscprintf_p(str ptr) MSVCRT__vscprintf_p
+@ cdecl _vscprintf_p_l(str ptr ptr) MSVCRT__vscprintf_p_l
@ cdecl _vscwprintf(wstr ptr) MSVCRT__vscwprintf
@ cdecl _vscwprintf_l(wstr ptr ptr) MSVCRT__vscwprintf_l
@ cdecl _vscwprintf_p(wstr ptr) MSVCRT__vscwprintf_p
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index 9017921..c0bc9e1 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -1804,8 +1804,8 @@
@ stub _vprintf_s_l
@ cdecl _vscprintf(str ptr) MSVCRT__vscprintf
@ stub _vscprintf_l
-@ stub _vscprintf_p
-@ stub _vscprintf_p_l
+@ cdecl _vscprintf_p(str ptr) MSVCRT__vscprintf_p
+@ cdecl _vscprintf_p_l(str ptr ptr) MSVCRT__vscprintf_p_l
@ cdecl _vscwprintf(wstr ptr) MSVCRT__vscwprintf
@ cdecl _vscwprintf_l(wstr ptr ptr) MSVCRT__vscwprintf_l
@ cdecl _vscwprintf_p(wstr ptr) MSVCRT__vscwprintf_p
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index c675436..0faf1f0 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -1819,8 +1819,8 @@
@ stub _vprintf_s_l
@ cdecl _vscprintf(str ptr) MSVCRT__vscprintf
@ stub _vscprintf_l
-@ stub _vscprintf_p
-@ stub _vscprintf_p_l
+@ cdecl _vscprintf_p(str ptr) MSVCRT__vscprintf_p
+@ cdecl _vscprintf_p_l(str ptr ptr) MSVCRT__vscprintf_p_l
@ cdecl _vscwprintf(wstr ptr) MSVCRT__vscwprintf
@ cdecl _vscwprintf_l(wstr ptr ptr) MSVCRT__vscwprintf_l
@ cdecl _vscwprintf_p(wstr ptr) MSVCRT__vscwprintf_p
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index 760f8f9..eddb27d 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -1516,8 +1516,8 @@
@ stub _vprintf_s_l
@ cdecl _vscprintf(str ptr) msvcr120._vscprintf
@ stub _vscprintf_l
-@ stub _vscprintf_p
-@ stub _vscprintf_p_l
+@ cdecl _vscprintf_p(str ptr) msvcr120._vscprintf_p
+@ cdecl _vscprintf_p_l(str ptr ptr) msvcr120._vscprintf_p_l
@ cdecl _vscwprintf(wstr ptr) msvcr120._vscwprintf
@ cdecl _vscwprintf_l(wstr ptr ptr) msvcr120._vscwprintf_l
@ cdecl _vscwprintf_p(wstr ptr) msvcr120._vscwprintf_p
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index fbe42f3..13a2270 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1126,8 +1126,8 @@
@ stub _vprintf_s_l
@ cdecl _vscprintf(str ptr) MSVCRT__vscprintf
@ stub _vscprintf_l
-@ stub _vscprintf_p
-@ stub _vscprintf_p_l
+@ cdecl _vscprintf_p(str ptr) MSVCRT__vscprintf_p
+@ cdecl _vscprintf_p_l(str ptr ptr) MSVCRT__vscprintf_p_l
@ cdecl _vscwprintf(wstr ptr) MSVCRT__vscwprintf
@ cdecl _vscwprintf_l(wstr ptr ptr) MSVCRT__vscwprintf_l
@ cdecl _vscwprintf_p(wstr ptr) MSVCRT__vscwprintf_p
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 9623aa5..e53f622 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1101,8 +1101,8 @@
@ stub _vprintf_s_l
@ cdecl _vscprintf(str ptr) MSVCRT__vscprintf
@ stub _vscprintf_l
-@ stub _vscprintf_p
-@ stub _vscprintf_p_l
+@ cdecl _vscprintf_p(str ptr) MSVCRT__vscprintf_p
+@ cdecl _vscprintf_p_l(str ptr ptr) MSVCRT__vscprintf_p_l
@ cdecl _vscwprintf(wstr ptr) MSVCRT__vscwprintf
@ cdecl _vscwprintf_l(wstr ptr ptr) MSVCRT__vscwprintf_l
@ cdecl _vscwprintf_p(wstr ptr) MSVCRT__vscwprintf_p
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 141cd9e..7156a50 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1059,7 +1059,7 @@
@ cdecl _utime(str ptr)
@ cdecl _vscprintf(str ptr) MSVCRT__vscprintf
# stub _vscprintf_l(str ptr ptr)
-# stub _vscprintf_p_l(str ptr ptr)
+@ cdecl _vscprintf_p_l(str ptr ptr) MSVCRT__vscprintf_p_l
@ cdecl _vscwprintf(wstr ptr) MSVCRT__vscwprintf
@ cdecl _vscwprintf_l(wstr ptr ptr) MSVCRT__vscwprintf_l
@ cdecl _vscwprintf_p_l(wstr ptr ptr) MSVCRT__vscwprintf_p_l
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index 935c264..771f6f6 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -825,6 +825,42 @@ int CDECL MSVCRT__vscprintf( const char *format, __ms_va_list valist )
}
/*********************************************************************
+ * _vscprintf_p_l (MSVCRT.@)
+ */
+int CDECL MSVCRT__vscprintf_p_l(const char *format,
+ MSVCRT__locale_t locale, __ms_va_list args)
+{
+ printf_arg args_ctx[MSVCRT__ARGMAX+1];
+ struct _str_ctx_a puts_ctx = {INT_MAX, NULL};
+ int ret;
+
+ memset(args_ctx, 0, sizeof(args_ctx));
+
+ ret = create_positional_ctx_a(args_ctx, format, args);
+ if(ret < 0) {
+ MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0);
+ *MSVCRT__errno() = MSVCRT_EINVAL;
+ return ret;
+ } else if(ret == 0) {
+ ret = pf_printf_a(puts_clbk_str_a, &puts_ctx, format, locale, FALSE, TRUE,
+ arg_clbk_valist, NULL, &args);
+ } else {
+ ret = pf_printf_a(puts_clbk_str_a, &puts_ctx, format, locale, TRUE, TRUE,
+ arg_clbk_positional, args_ctx, NULL);
+ }
+
+ return ret;
+}
+
+/*********************************************************************
+ * _vscprintf_p (MSVCR80.@)
+ */
+int CDECL MSVCRT__vscprintf_p(const char *format, __ms_va_list argptr)
+{
+ return MSVCRT__vscprintf_p_l(format, NULL, argptr);
+}
+
+/*********************************************************************
* _snprintf (MSVCRT.@)
*/
int CDECL MSVCRT__snprintf(char *str, unsigned int len, const char *format, ...)
More information about the wine-cvs
mailing list