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