diff --git a/dlls/msvcrt/data.c b/dlls/msvcrt/data.c index 1c4b8a7971f..251197027e5 100644 --- a/dlls/msvcrt/data.c +++ b/dlls/msvcrt/data.c @@ -342,6 +342,7 @@ void CDECL __wgetmainargs(int *argc, MSVCRT_wchar_t** *wargv, MSVCRT_wchar_t** * unsigned int CDECL _initterm(_INITTERMFUN *start,_INITTERMFUN *end) { _INITTERMFUN* current = start; + unsigned int count=0; TRACE("(%p,%p)\n",start,end); while (current +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef void (*_INITTERMFUN)(void); +extern unsigned int CDECL _initterm(_INITTERMFUN *start,_INITTERMFUN *end); + +static int callbacked; + +void initcallback(void) +{ + callbacked++; +} + +#define initterm_test(start, end, expected) \ + callbacked = 0; \ + rc = _initterm(start, end); \ + ok(expected == rc, "_initterm: return result mismatch: got %i, expected %i\n", rc, expected); \ + ok(expected == callbacked,"_initterm: callbacks count mismatch: got %i, expected %i\n", callbacked, expected); + +void test_initterm(void) +{ + int i; + int rc; + static _INITTERMFUN callbacks[4]; + + for (i = 0; i < 4; i++) + { + callbacks[i] = initcallback; + } + + initterm_test(&callbacks[0], &callbacks[1], 1); + initterm_test(&callbacks[0], &callbacks[2], 2); + initterm_test(&callbacks[0], &callbacks[3], 3); + + callbacks[1] = NULL; + initterm_test(&callbacks[0], &callbacks[3], 2); +} + +START_TEST(data) +{ + test_initterm(); +}