msvcrt: Added _snwscanf implementation.
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 569192c..c1f6e47 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1101,10 +1101,10 @@
@ stub _snwprintf_l
@ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s
@ stub _snwprintf_s_l
-@ stub _snwscanf
-@ stub _snwscanf_l
-@ stub _snwscanf_s
-@ stub _snwscanf_s_l
+@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf
+@ varargs _snwscanf_l(wstr long wstr ptr) msvcrt._snwscanf_l
+@ varargs _snwscanf_s(wstr long wstr) msvcrt._snwscanf_s
+@ varargs _snwscanf_s_l(wstr long wstr ptr) msvcrt._snwscanf_s_l
@ varargs _sopen(str long long) msvcrt._sopen
@ cdecl _sopen_s(ptr str long long long) msvcrt._sopen_s
@ varargs _spawnl(long str str) msvcrt._spawnl
diff --git a/dlls/msvcr70/msvcr70.spec b/dlls/msvcr70/msvcr70.spec
index 815262d..58bdb0c 100644
--- a/dlls/msvcr70/msvcr70.spec
+++ b/dlls/msvcr70/msvcr70.spec
@@ -528,7 +528,7 @@
@ varargs _snprintf(ptr long str) msvcrt._snprintf
@ varargs _snscanf(str long str) msvcrt._snscanf
@ varargs _snwprintf(ptr long wstr) msvcrt._snwprintf
-@ stub _snwscanf
+@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf
@ varargs _sopen(str long long) msvcrt._sopen
@ varargs _spawnl(long str str) msvcrt._spawnl
@ varargs _spawnle(long str str) msvcrt._spawnle
diff --git a/dlls/msvcr71/msvcr71.spec b/dlls/msvcr71/msvcr71.spec
index de8fffe..0d2744b 100644
--- a/dlls/msvcr71/msvcr71.spec
+++ b/dlls/msvcr71/msvcr71.spec
@@ -524,7 +524,7 @@
@ varargs _snprintf(str long str) msvcrt._snprintf
@ varargs _snscanf(str long str) msvcrt._snscanf
@ varargs _snwprintf(wstr long wstr) msvcrt._snwprintf
-@ stub _snwscanf
+@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf
@ varargs _sopen(str long long) msvcrt._sopen
@ varargs _spawnl(long str str) msvcrt._spawnl
@ varargs _spawnle(long str str) msvcrt._spawnle
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 813f20a..6b898a5 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -955,10 +955,10 @@
@ stub _snwprintf_l
@ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s
@ stub _snwprintf_s_l
-@ stub _snwscanf
-@ stub _snwscanf_l
-@ stub _snwscanf_s
-@ stub _snwscanf_s_l
+@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf
+@ varargs _snwscanf_l(wstr long wstr ptr) msvcrt._snwscanf_l
+@ varargs _snwscanf_s(wstr long wstr) msvcrt._snwscanf_s
+@ varargs _snwscanf_s_l(wstr long wstr ptr) msvcrt._snwscanf_s_l
@ varargs _sopen(str long long) msvcrt._sopen
@ cdecl _sopen_s(ptr str long long long) msvcrt._sopen_s
@ varargs _spawnl(long str str) msvcrt._spawnl
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index b27bbbb..43582cd 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -941,10 +941,10 @@
@ stub _snwprintf_l
@ varargs _snwprintf_s(ptr long long wstr) msvcrt._snwprintf_s
@ stub _snwprintf_s_l
-@ stub _snwscanf
-@ stub _snwscanf_l
-@ stub _snwscanf_s
-@ stub _snwscanf_s_l
+@ varargs _snwscanf(wstr long wstr) msvcrt._snwscanf
+@ varargs _snwscanf_l(wstr long wstr ptr) msvcrt._snwscanf_l
+@ varargs _snwscanf_s(wstr long wstr) msvcrt._snwscanf_s
+@ varargs _snwscanf_s_l(wstr long wstr ptr) msvcrt._snwscanf_s_l
@ varargs _sopen(str long long) msvcrt._sopen
@ cdecl _sopen_s(ptr str long long long) msvcrt._sopen_s
@ varargs _spawnl(long str str) msvcrt._spawnl
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 43bcec0..ef88e71 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -884,10 +884,10 @@
# stub _snwprintf_l
@ varargs _snwprintf_s(ptr long long wstr) MSVCRT__snwprintf_s
# stub _snwprintf_s_l
-# stub _snwscanf
-# stub _snwscanf_l
-# stub _snwscanf_s
-# stub _snwscanf_s_l
+@ varargs _snwscanf(wstr long wstr) MSVCRT__snwscanf
+@ varargs _snwscanf_l(wstr long wstr ptr) MSVCRT__snwscanf_l
+@ varargs _snwscanf_s(wstr long wstr) MSVCRT__snwscanf_s
+@ varargs _snwscanf_s_l(wstr long wstr ptr) MSVCRT__snwscanf_s_l
@ varargs _sopen(str long long) MSVCRT__sopen
@ cdecl _sopen_s(ptr str long long long) MSVCRT__sopen_s
@ varargs _spawnl(long str str)
diff --git a/dlls/msvcrt/scanf.c b/dlls/msvcrt/scanf.c
index d02892c..b998400 100644
--- a/dlls/msvcrt/scanf.c
+++ b/dlls/msvcrt/scanf.c
@@ -99,6 +99,15 @@
/* vsnscanf_s_l */
#define SECURE
#include "scanf.h"
+
+/* vsnwscanf_l */
+#define WIDE_SCANF 1
+#undef SECURE
+#include "scanf.h"
+
+/* vsnwscanf_s_l */
+#define SECURE 1
+#include "scanf.h"
#undef STRING_LEN
/* vswscanf_l */
@@ -650,3 +659,63 @@
__ms_va_end(valist);
return res;
}
+
+/*********************************************************************
+ * _snwscanf (MSVCRT.@)
+ */
+int CDECL MSVCRT__snwscanf(MSVCRT_wchar_t *input, MSVCRT_size_t length,
+ const MSVCRT_wchar_t *format, ...)
+{
+ __ms_va_list valist;
+ int res;
+
+ __ms_va_start(valist, format);
+ res = MSVCRT_vsnwscanf_l(input, length, format, NULL, valist);
+ __ms_va_end(valist);
+ return res;
+}
+
+/*********************************************************************
+ * _snwscanf_l (MSVCRT.@)
+ */
+int CDECL MSVCRT__snwscanf_l(MSVCRT_wchar_t *input, MSVCRT_size_t length,
+ const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, ...)
+{
+ __ms_va_list valist;
+ int res;
+
+ __ms_va_start(valist, locale);
+ res = MSVCRT_vsnwscanf_l(input, length, format, locale, valist);
+ __ms_va_end(valist);
+ return res;
+}
+
+/*********************************************************************
+ * _snwscanf_s (MSVCRT.@)
+ */
+int CDECL MSVCRT__snwscanf_s(MSVCRT_wchar_t *input, MSVCRT_size_t length,
+ const MSVCRT_wchar_t *format, ...)
+{
+ __ms_va_list valist;
+ int res;
+
+ __ms_va_start(valist, format);
+ res = MSVCRT_vsnwscanf_s_l(input, length, format, NULL, valist);
+ __ms_va_end(valist);
+ return res;
+}
+
+/*********************************************************************
+ * _snscanf_s_l (MSVCRT.@)
+ */
+int CDECL MSVCRT__snwscanf_s_l(MSVCRT_wchar_t *input, MSVCRT_size_t length,
+ const MSVCRT_wchar_t *format, MSVCRT__locale_t locale, ...)
+{
+ __ms_va_list valist;
+ int res;
+
+ __ms_va_start(valist, locale);
+ res = MSVCRT_vsnwscanf_s_l(input, length, format, locale, valist);
+ __ms_va_end(valist);
+ return res;
+}