Piotr Caban : msvcrt: Added vscwprintf_{l, p_l} functions implementation.

Alexandre Julliard julliard at winehq.org
Mon Aug 1 13:22:13 CDT 2011


Module: wine
Branch: master
Commit: 0c14dc53302eb0bd661547525598ff782aaf09b1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0c14dc53302eb0bd661547525598ff782aaf09b1

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Aug  1 16:08:06 2011 +0200

msvcrt: Added vscwprintf_{l,p_l} functions implementation.

---

 dlls/msvcr100/msvcr100.spec |    4 +-
 dlls/msvcr80/msvcr80.spec   |    4 +-
 dlls/msvcr90/msvcr90.spec   |    4 +-
 dlls/msvcrt/msvcrt.spec     |    4 +-
 dlls/msvcrt/wcs.c           |   74 ++++++++++++++++++++++++++-----------------
 5 files changed, 53 insertions(+), 37 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 1a2fa4b..e25af8f 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1246,9 +1246,9 @@
 @ stub _vscprintf_p
 @ stub _vscprintf_p_l
 @ cdecl _vscwprintf(wstr ptr) msvcrt._vscwprintf
-@ stub _vscwprintf_l
+@ cdecl _vscwprintf_l(wstr ptr ptr) msvcrt._vscwprintf_l
 @ stub _vscwprintf_p
-@ stub _vscwprintf_p_l
+@ cdecl _vscwprintf_p_l(wstr ptr ptr) msvcrt._vscwprintf_p_l
 @ cdecl _vsnprintf(ptr long str ptr) msvcrt._vsnprintf
 @ cdecl _vsnprintf_c(ptr long str ptr) msvcrt._vsnprintf_c
 @ cdecl _vsnprintf_c_l(ptr long str ptr ptr) msvcrt._vsnprintf_c_l
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 1e14bfc..6eddfd7 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1099,9 +1099,9 @@
 @ stub _vscprintf_p
 @ stub _vscprintf_p_l
 @ cdecl _vscwprintf(wstr ptr) msvcrt._vscwprintf
-@ stub _vscwprintf_l
+@ cdecl _vscwprintf_l(wstr ptr ptr) msvcrt._vscwprintf_l
 @ stub _vscwprintf_p
-@ stub _vscwprintf_p_l
+@ cdecl _vscwprintf_p_l(wstr ptr ptr) msvcrt._vscwprintf_p_l
 @ cdecl _vsnprintf(ptr long str ptr) msvcrt._vsnprintf
 @ cdecl _vsnprintf_c(ptr long str ptr) msvcrt._vsnprintf_c
 @ cdecl _vsnprintf_c_l(ptr long str ptr ptr) msvcrt._vsnprintf_c_l
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 02cb845..74d5cdc 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1086,9 +1086,9 @@
 @ stub _vscprintf_p
 @ stub _vscprintf_p_l
 @ cdecl _vscwprintf(wstr ptr) msvcrt._vscwprintf
-@ stub _vscwprintf_l
+@ cdecl _vscwprintf_l(wstr ptr ptr) msvcrt._vscwprintf_l
 @ stub _vscwprintf_p
-@ stub _vscwprintf_p_l
+@ cdecl _vscwprintf_p_l(wstr ptr ptr) msvcrt._vscwprintf_p_l
 @ cdecl _vsnprintf(ptr long str ptr) msvcrt._vsnprintf
 @ cdecl _vsnprintf_c(ptr long str ptr) msvcrt._vsnprintf_c
 @ cdecl _vsnprintf_c_l(ptr long str ptr ptr) msvcrt._vsnprintf_c_l
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 289ea46..2186904 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1031,8 +1031,8 @@
 # stub _vscprintf_l(str ptr ptr)
 # stub _vscprintf_p_l(str ptr ptr)
 @ cdecl _vscwprintf(wstr ptr) MSVCRT__vscwprintf
-# stub _vscwprintf_l(wstr ptr ptr)
-# stub _vscwprintf_p_l(wstr ptr ptr)
+@ cdecl _vscwprintf_l(wstr ptr ptr) MSVCRT__vscwprintf_l
+@ cdecl _vscwprintf_p_l(wstr ptr ptr) MSVCRT__vscwprintf_p_l
 @ cdecl _vsnprintf(ptr long str ptr) MSVCRT_vsnprintf
 @ cdecl _vsnprintf_c(ptr long str ptr) MSVCRT_vsnprintf
 @ cdecl _vsnprintf_c_l(ptr long str ptr ptr) MSVCRT_vsnprintf_l
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index dbcee85..d771d4f 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -691,6 +691,35 @@ int CDECL MSVCRT_vsnwprintf_l(MSVCRT_wchar_t *str, MSVCRT_size_t len,
 }
 
 /*********************************************************************
+ *		_vswprintf_p_l (MSVCRT.@)
+ */
+int CDECL MSVCRT_vswprintf_p_l(MSVCRT_wchar_t *buffer, MSVCRT_size_t length,
+        const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, __ms_va_list args)
+{
+    static const MSVCRT_wchar_t nullbyte = '\0';
+    printf_arg args_ctx[MSVCRT__ARGMAX+1];
+    struct _str_ctx_w puts_ctx = {length, buffer};
+    int ret;
+
+    memset(args_ctx, 0, sizeof(args_ctx));
+
+    ret = create_positional_ctx_w(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_w(puts_clbk_str_w, &puts_ctx, format, locale, TRUE, TRUE,
+                arg_clbk_valist, NULL, &args);
+    else
+        ret = pf_printf_w(puts_clbk_str_w, &puts_ctx, format, locale, TRUE, TRUE,
+                arg_clbk_positional, args_ctx, NULL);
+
+    puts_clbk_str_w(&puts_ctx, 1, &nullbyte);
+    return ret;
+}
+
+/*********************************************************************
  *              _vsnwprintf_s_l (MSVCRT.@)
  */
 int CDECL MSVCRT_vsnwprintf_s_l( MSVCRT_wchar_t *str, MSVCRT_size_t sizeOfBuffer,
@@ -860,6 +889,22 @@ int CDECL MSVCRT__vscwprintf( const MSVCRT_wchar_t *format, __ms_va_list args )
 }
 
 /*********************************************************************
+ *		_vscwprintf_l (MSVCRT.@)
+ */
+int CDECL MSVCRT__vscwprintf_l( const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, __ms_va_list args )
+{
+    return MSVCRT_vsnwprintf_l( NULL, INT_MAX, format, locale, args );
+}
+
+/*********************************************************************
+ *		_vscwprintf_p_l (MSVCRT.@)
+ */
+int CDECL MSVCRT__vscwprintf_p_l( const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, __ms_va_list args )
+{
+    return MSVCRT_vswprintf_p_l( NULL, INT_MAX, format, locale, args );
+}
+
+/*********************************************************************
  *		vswprintf_s (MSVCRT.@)
  */
 int CDECL MSVCRT_vswprintf_s(MSVCRT_wchar_t* str, MSVCRT_size_t numberOfElements,
@@ -933,35 +978,6 @@ int CDECL MSVCRT_sprintf_p_l(char *buffer, MSVCRT_size_t length,
 }
 
 /*********************************************************************
- *		_vswprintf_p_l (MSVCRT.@)
- */
-int CDECL MSVCRT_vswprintf_p_l(MSVCRT_wchar_t *buffer, MSVCRT_size_t length,
-        const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, __ms_va_list args)
-{
-    static const MSVCRT_wchar_t nullbyte = '\0';
-    printf_arg args_ctx[MSVCRT__ARGMAX+1];
-    struct _str_ctx_w puts_ctx = {length, buffer};
-    int ret;
-
-    memset(args_ctx, 0, sizeof(args_ctx));
-
-    ret = create_positional_ctx_w(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_w(puts_clbk_str_w, &puts_ctx, format, locale, TRUE, TRUE,
-                arg_clbk_valist, NULL, &args);
-    else
-        ret = pf_printf_w(puts_clbk_str_w, &puts_ctx, format, locale, TRUE, TRUE,
-                arg_clbk_positional, args_ctx, NULL);
-
-    puts_clbk_str_w(&puts_ctx, 1, &nullbyte);
-    return ret;
-}
-
-/*********************************************************************
  *		_swprintf_p_l (MSVCRT.@)
  */
 int CDECL MSVCRT_swprintf_p_l(MSVCRT_wchar_t *buffer, MSVCRT_size_t length,




More information about the wine-cvs mailing list