From: Fabian Maurer Subject: [PATCH v2 3/4] msvcrt: Add quick_exit Message-Id: <20180704202758.26877-3-dark.shadow4@web.de> Date: Wed, 4 Jul 2018 22:27:57 +0200 In-Reply-To: <20180704202758.26877-1-dark.shadow4@web.de> References: <20180704202758.26877-1-dark.shadow4@web.de> Follow-up issue to bug 45295. Signed-off-by: Fabian Maurer # Conflicts: # dlls/msvcr120/tests/msvcr120.c # dlls/ucrtbase/tests/misc.c --- .../api-ms-win-crt-runtime-l1-1-0.spec | 2 +- dlls/msvcr120/tests/msvcr120.c | 3 +++ dlls/msvcrt/exit.c | 9 +++++++++ dlls/ucrtbase/tests/misc.c | 3 +++ dlls/ucrtbase/ucrtbase.spec | 2 +- 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dlls/api-ms-win-crt-runtime-l1-1-0/api-ms-win-crt-runtime-l1-1-0.spec b/dlls/api-ms-win-crt-runtime-l1-1-0/api-ms-win-crt-runtime-l1-1-0.spec index 4bc8df768d1..74d682b33bf 100644 --- a/dlls/api-ms-win-crt-runtime-l1-1-0/api-ms-win-crt-runtime-l1-1-0.spec +++ b/dlls/api-ms-win-crt-runtime-l1-1-0/api-ms-win-crt-runtime-l1-1-0.spec @@ -97,7 +97,7 @@ @ cdecl fesetround(long) ucrtbase.fesetround @ stub fetestexcept @ cdecl perror(str) ucrtbase.perror -@ stub quick_exit +@ cdecl quick_exit(long) ucrtbase.quick_exit @ cdecl raise(long) ucrtbase.raise @ cdecl set_terminate(ptr) ucrtbase.set_terminate @ cdecl signal(long long) ucrtbase.signal diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c index a816ad6e7c5..e9734de4f5e 100644 --- a/dlls/msvcr120/tests/msvcr120.c +++ b/dlls/msvcr120/tests/msvcr120.c @@ -185,6 +185,7 @@ static void (__cdecl *p_free_locale)(_locale_t); static unsigned short (__cdecl *p_wctype)(const char*); static int (__cdecl *p_vsscanf)(const char*, const char *, __ms_va_list valist); static int (__cdecl *p_crt_at_quick_exit)(void (__cdecl *func)(void)); +static void (__cdecl *p_quick_exit)(int exitcode); /* make sure we use the correct errno */ #undef errno @@ -240,6 +241,7 @@ static BOOL init(void) p_wcreate_locale = (void*)GetProcAddress(module, "_wcreate_locale"); p_free_locale = (void*)GetProcAddress(module, "_free_locale"); p_crt_at_quick_exit = (void*)GetProcAddress(module, "_crt_at_quick_exit"); + p_quick_exit = (void*)GetProcAddress(module, "quick_exit"); SET(p_wctype, "wctype"); SET(p_fegetenv, "fegetenv"); SET(p__clearfp, "_clearfp"); @@ -940,6 +942,7 @@ static void test_vsscanf(void) static void test_quick_exit(void) { ok(p_crt_at_quick_exit == NULL, "_crt_at_quick_exit should not exist in this version\n"); + ok(p_quick_exit == NULL, "quick_exit should not exist in this version."); } START_TEST(msvcr120) diff --git a/dlls/msvcrt/exit.c b/dlls/msvcrt/exit.c index 3cce64dc75b..6dcf0db2731 100644 --- a/dlls/msvcrt/exit.c +++ b/dlls/msvcrt/exit.c @@ -414,6 +414,15 @@ int CDECL MSVCRT__crt_at_quick_exit(void (__cdecl *func)(void)) return -1; } +/********************************************************************* + * quick_exit (MSVCRT.@) + */ +void CDECL MSVCRT_quick_exit(int exitcode) +{ + FIXME("partial stub: (%d)\n", exitcode); + MSVCRT__exit(exitcode); +} + /********************************************************************* * _crt_atexit (UCRTBASE.@) */ diff --git a/dlls/ucrtbase/tests/misc.c b/dlls/ucrtbase/tests/misc.c index 14b05ffc137..54ae4e94714 100644 --- a/dlls/ucrtbase/tests/misc.c +++ b/dlls/ucrtbase/tests/misc.c @@ -128,6 +128,7 @@ static char* (CDECL *p_asctime)(const struct tm *); static void (CDECL *p_exit)(int); static int (CDECL *p__crt_atexit)(void (CDECL*)(void)); static int (__cdecl *p_crt_at_quick_exit)(void (__cdecl *func)(void)); +static void (__cdecl *p_quick_exit)(int exitcode); static void test__initialize_onexit_table(void) { @@ -435,6 +436,7 @@ static BOOL init(void) p__crt_atexit = (void*)GetProcAddress(module, "_crt_atexit"); p_exit = (void*)GetProcAddress(module, "exit"); p_crt_at_quick_exit = (void*)GetProcAddress(module, "_crt_at_quick_exit"); + p_quick_exit = (void*)GetProcAddress(module, "quick_exit"); return TRUE; } @@ -820,6 +822,7 @@ static void test_call_exit(void) static void test_quick_exit(void) { ok(p_crt_at_quick_exit != NULL, "_crt_at_quick_exit should exist in this version\n"); + ok(p_quick_exit != NULL, "quick_exit should exist in this version\n"); } START_TEST(misc) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 3cb355506a2..9d993e90b7a 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -2454,7 +2454,7 @@ @ cdecl putwchar(long) MSVCRT__fputwchar @ cdecl qsort(ptr long long ptr) MSVCRT_qsort @ cdecl qsort_s(ptr long long ptr ptr) MSVCRT_qsort_s -@ stub quick_exit +@ cdecl quick_exit(long) MSVCRT_quick_exit @ cdecl raise(long) MSVCRT_raise @ cdecl rand() MSVCRT_rand @ cdecl rand_s(ptr) MSVCRT_rand_s -- 2.18.0