Module: wine Branch: refs/heads/master Commit: 2132eb549074b35768a8023c7e5a9dde234b8131 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=2132eb549074b35768a8023c...
Author: Andrew Ziem ahziem1@mailbolt.com Date: Tue Jun 13 22:51:13 2006 -0600
msvcrt: Fix _initterm, with tests.
---
dlls/msvcrt/data.c | 4 ++ dlls/msvcrt/tests/.gitignore | 1 + dlls/msvcrt/tests/Makefile.in | 1 + dlls/msvcrt/tests/data.c | 73 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 1 deletions(-) create mode 100644 dlls/msvcrt/tests/data.c
diff --git a/dlls/msvcrt/data.c b/dlls/msvcrt/data.c index 1c4b8a7..2511970 100644 --- a/dlls/msvcrt/data.c +++ b/dlls/msvcrt/data.c @@ -342,6 +342,7 @@ void CDECL __wgetmainargs(int *argc, MSV unsigned int CDECL _initterm(_INITTERMFUN *start,_INITTERMFUN *end) { _INITTERMFUN* current = start; + unsigned int count=0;
TRACE("(%p,%p)\n",start,end); while (current<end) @@ -351,10 +352,11 @@ unsigned int CDECL _initterm(_INITTERMFU TRACE("Call init function %p\n",*current); (**current)(); TRACE("returned\n"); + count++; } current++; } - return 0; + return count; }
/********************************************************************* diff --git a/dlls/msvcrt/tests/.gitignore b/dlls/msvcrt/tests/.gitignore index 2980711..f07f5c9 100644 --- a/dlls/msvcrt/tests/.gitignore +++ b/dlls/msvcrt/tests/.gitignore @@ -1,5 +1,6 @@ Makefile cpp.ok +data.ok dir.ok environ.ok file.ok diff --git a/dlls/msvcrt/tests/Makefile.in b/dlls/msvcrt/tests/Makefile.in index 9569f1e..38ddf05 100644 --- a/dlls/msvcrt/tests/Makefile.in +++ b/dlls/msvcrt/tests/Makefile.in @@ -9,6 +9,7 @@ EXTRAINCL = -I$(TOPSRCDIR)/include/msvcr
CTESTS = \ cpp.c \ + data.c \ dir.c \ environ.c \ file.c \ diff --git a/dlls/msvcrt/tests/data.c b/dlls/msvcrt/tests/data.c new file mode 100644 index 0000000..c8eee75 --- /dev/null +++ b/dlls/msvcrt/tests/data.c @@ -0,0 +1,73 @@ +/* + * Tests msvcrt/data.c + * + * Copyright 2006 Andrew Ziem + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "msvcrt.h" +#include "wine/test.h" +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> +#include <fcntl.h> +#include <sys/stat.h> +#include <io.h> +#include <windef.h> +#include <winbase.h> +#include <winnls.h> +#include <process.h> +#include <errno.h> + +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(); +}