[PATCH v2 3/4] msvcrt: Add quick_exit

Fabian Maurer dark.shadow4 at web.de
Wed Jul 4 15:27:57 CDT 2018


Follow-up issue to bug 45295.

Signed-off-by: Fabian Maurer <dark.shadow4 at web.de>

# 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




More information about the wine-devel mailing list