1313#include <ndk/mmfuncs.h>
1414#include <ndk/rtlfuncs.h>
1515
16+ #ifndef TEST_STATIC_CRT
17+
18+ typedef int (__cdecl * PFN_vsnwprintf )(wchar_t * buf , size_t cnt , const wchar_t * fmt , va_list args );
19+ static PFN_vsnwprintf p_vsnwprintf ;
20+
21+ static BOOL Init (void )
22+ {
23+ HMODULE hdll = LoadLibraryA (TEST_DLL_NAME );
24+ p_vsnwprintf = (PFN_vsnwprintf )GetProcAddress (hdll , "_vsnwprintf" );
25+ ok (p_vsnwprintf != NULL , "Failed to load _vsnwprintf from %s\n" , TEST_DLL_NAME );
26+ return (p_vsnwprintf != NULL );
27+ }
28+ #define _vsnwprintf p_vsnwprintf
29+
30+ #endif // !TEST_STATIC_CRT
31+
1632static void call_varargs (wchar_t * buf , size_t buf_size , int expected_ret , LPCWSTR formatString , ...)
1733{
1834 va_list args ;
@@ -28,6 +44,14 @@ START_TEST(_vsnwprintf)
2844{
2945 wchar_t buffer [255 ];
3046
47+ #ifndef TEST_STATIC_CRT
48+ if (!Init ())
49+ {
50+ skip ("Skipping tests, because _vsnwprintf is not available\n" );
51+ return ;
52+ }
53+ #endif
54+
3155 /* Test basic functionality */
3256 //call_varargs(buffer, 255, 10, L"%s world!", "hello"); // this test is broken
3357 call_varargs (buffer , 255 , 12 , L"%s world!" , L"hello" );
@@ -49,13 +73,15 @@ START_TEST(_vsnwprintf)
4973 EndSeh (STATUS_SUCCESS );
5074#endif
5175
52- #if defined(TEST_USER32 )/* NTDLL doesn't use/set errno */
53- ok (errno == EINVAL , "Expected EINVAL, got %u\n" , errno );
76+ #if defined(TEST_USER32 )
77+ ok_eq_uint (errno , EINVAL );
78+ #elif defined(TEST_NTDLL ) || defined(TEST_CRTDLL )
79+ ok_eq_uint (errno , 0 );
5480#else
5581 if (GetNTVersion () >= _WIN32_WINNT_VISTA )
56- ok (errno == ERROR_BAD_COMMAND , "Expected 0, got %u\n" , errno );
82+ ok_eq_uint (errno , ERROR_BAD_COMMAND );
5783 else
58- ok (errno == 0 , "Expected 0, got %u\n" , errno );
84+ ok_eq_uint (errno , 0 );
5985#endif
6086
6187 /* This one is no better */
@@ -66,18 +92,29 @@ START_TEST(_vsnwprintf)
6692 call_varargs (NULL , 0 , 20 , L"%s it really work?" , L"does" );
6793#endif
6894 EndSeh (STATUS_SUCCESS );
95+ #if defined(TEST_NTDLL ) || defined(TEST_CRTDLL )
96+ ok_eq_uint (errno , 0 );
97+ #else
6998 if (GetNTVersion () >= _WIN32_WINNT_VISTA )
70- ok (errno == ERROR_BAD_COMMAND , "Expected 0, got %u\n" , errno );
99+ ok_eq_uint (errno , ERROR_BAD_COMMAND );
71100 else
72- ok (errno == 0 , "Expected 0, got %u\n" , errno );
73-
101+ ok_eq_uint (errno , 0 );
102+ #endif
74103
75104 /* One more NULL checks */
76105 StartSeh ()
77106 call_varargs (buffer , 255 , -1 , NULL );
107+ #if defined(TEST_CRTDLL )
108+ EndSeh (STATUS_ACCESS_VIOLATION );
109+ #else
78110 EndSeh ((GetNTVersion () >= _WIN32_WINNT_VISTA ) ? 0 : STATUS_ACCESS_VIOLATION );
111+ #endif
112+ #if defined(TEST_NTDLL ) || defined(TEST_CRTDLL )
113+ ok_eq_uint (errno , 0 );
114+ #else
79115 if (GetNTVersion () >= _WIN32_WINNT_VISTA )
80- ok (errno == ERROR_BAD_COMMAND , "Expected 0, got %u\n" , errno );
116+ ok_eq_uint (errno , ERROR_BAD_COMMAND );
81117 else
82- ok (errno == 0 , "Expected 0, got %u\n" , errno );
118+ ok_eq_uint (errno , 0 );
119+ #endif
83120}
0 commit comments