Commit 1b2554c2 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

msvcr120: Added vsscanf() and vswscanf().

parent 9463c52d
...@@ -2436,10 +2436,10 @@ ...@@ -2436,10 +2436,10 @@
@ stub vscanf_s @ stub vscanf_s
@ cdecl vsprintf(ptr str ptr) MSVCRT_vsprintf @ cdecl vsprintf(ptr str ptr) MSVCRT_vsprintf
@ cdecl vsprintf_s(ptr long str ptr) MSVCRT_vsprintf_s @ cdecl vsprintf_s(ptr long str ptr) MSVCRT_vsprintf_s
@ stub vsscanf @ cdecl vsscanf(ptr str ptr) MSVCRT_vsscanf
@ stub vsscanf_s @ stub vsscanf_s
@ cdecl vswprintf_s(ptr long wstr ptr) MSVCRT_vswprintf_s @ cdecl vswprintf_s(ptr long wstr ptr) MSVCRT_vswprintf_s
@ stub vswscanf @ cdecl vswscanf(ptr wstr ptr) MSVCRT_vswscanf
@ stub vswscanf_s @ stub vswscanf_s
@ cdecl vwprintf(wstr ptr) MSVCRT_vwprintf @ cdecl vwprintf(wstr ptr) MSVCRT_vwprintf
@ cdecl vwprintf_s(wstr ptr) MSVCRT_vwprintf_s @ cdecl vwprintf_s(wstr ptr) MSVCRT_vwprintf_s
......
...@@ -183,6 +183,7 @@ static int (CDECL *p__clearfp)(void); ...@@ -183,6 +183,7 @@ static int (CDECL *p__clearfp)(void);
static _locale_t (__cdecl *p_wcreate_locale)(int, const wchar_t *); static _locale_t (__cdecl *p_wcreate_locale)(int, const wchar_t *);
static void (__cdecl *p_free_locale)(_locale_t); static void (__cdecl *p_free_locale)(_locale_t);
static unsigned short (__cdecl *p_wctype)(const char*); static unsigned short (__cdecl *p_wctype)(const char*);
static int (__cdecl *p_vsscanf)(const char*, const char *, __ms_va_list valist);
/* make sure we use the correct errno */ /* make sure we use the correct errno */
#undef errno #undef errno
...@@ -240,6 +241,7 @@ static BOOL init(void) ...@@ -240,6 +241,7 @@ static BOOL init(void)
SET(p_wctype, "wctype"); SET(p_wctype, "wctype");
SET(p_fegetenv, "fegetenv"); SET(p_fegetenv, "fegetenv");
SET(p__clearfp, "_clearfp"); SET(p__clearfp, "_clearfp");
SET(p_vsscanf, "vsscanf");
if(sizeof(void*) == 8) { /* 64-bit initialization */ if(sizeof(void*) == 8) { /* 64-bit initialization */
SET(p_critical_section_ctor, SET(p_critical_section_ctor,
"??0critical_section@Concurrency@@QEAA@XZ"); "??0critical_section@Concurrency@@QEAA@XZ");
...@@ -911,6 +913,29 @@ static void test_wctype(void) ...@@ -911,6 +913,29 @@ static void test_wctype(void)
} }
} }
static int __cdecl _vsscanf_wrapper(const char *buffer, const char *format, ...)
{
int ret;
__ms_va_list valist;
__ms_va_start(valist, format);
ret = p_vsscanf(buffer, format, valist);
__ms_va_end(valist);
return ret;
}
static void test_vsscanf(void)
{
static const char *fmt = "%d";
char buff[16];
int ret, v;
v = 0;
strcpy(buff, "10");
ret = _vsscanf_wrapper(buff, fmt, &v);
ok(ret == 1, "Unexpected ret %d.\n", ret);
ok(v == 10, "got %d.\n", v);
}
START_TEST(msvcr120) START_TEST(msvcr120)
{ {
if (!init()) return; if (!init()) return;
...@@ -928,4 +953,5 @@ START_TEST(msvcr120) ...@@ -928,4 +953,5 @@ START_TEST(msvcr120)
test__wcreate_locale(); test__wcreate_locale();
test__Condition_variable(); test__Condition_variable();
test_wctype(); test_wctype();
test_vsscanf();
} }
...@@ -2098,10 +2098,10 @@ ...@@ -2098,10 +2098,10 @@
@ stub vscanf_s @ stub vscanf_s
@ cdecl vsprintf(ptr str ptr) msvcr120.vsprintf @ cdecl vsprintf(ptr str ptr) msvcr120.vsprintf
@ cdecl vsprintf_s(ptr long str ptr) msvcr120.vsprintf_s @ cdecl vsprintf_s(ptr long str ptr) msvcr120.vsprintf_s
@ stub vsscanf @ cdecl vsscanf(ptr str ptr) msvcr120.vsscanf
@ stub vsscanf_s @ stub vsscanf_s
@ cdecl vswprintf_s(ptr long wstr ptr) msvcr120.vswprintf_s @ cdecl vswprintf_s(ptr long wstr ptr) msvcr120.vswprintf_s
@ stub vswscanf @ cdecl vswscanf(ptr wstr ptr) msvcr120.vswscanf
@ stub vswscanf_s @ stub vswscanf_s
@ cdecl vwprintf(wstr ptr) msvcr120.vwprintf @ cdecl vwprintf(wstr ptr) msvcr120.vwprintf
@ cdecl vwprintf_s(wstr ptr) msvcr120.vwprintf_s @ cdecl vwprintf_s(wstr ptr) msvcr120.vwprintf_s
......
...@@ -795,3 +795,23 @@ int CDECL MSVCRT__snwscanf_s_l(MSVCRT_wchar_t *input, MSVCRT_size_t length, ...@@ -795,3 +795,23 @@ int CDECL MSVCRT__snwscanf_s_l(MSVCRT_wchar_t *input, MSVCRT_size_t length,
__ms_va_end(valist); __ms_va_end(valist);
return res; return res;
} }
/*********************************************************************
* vsscanf (MSVCRT120.@)
*/
int CDECL MSVCRT_vsscanf(const char *buffer, const char *format, __ms_va_list valist)
{
if (!MSVCRT_CHECK_PMT(buffer != NULL && format != NULL)) return -1;
return MSVCRT_vsscanf_l(buffer, format, NULL, valist);
}
/*********************************************************************
* vswscanf (MSVCRT120.@)
*/
int CDECL MSVCRT_vswscanf(const MSVCRT_wchar_t *buffer, const MSVCRT_wchar_t *format, __ms_va_list valist)
{
if (!MSVCRT_CHECK_PMT(buffer != NULL && format != NULL)) return -1;
return MSVCRT_vswscanf_l(buffer, format, NULL, valist);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment