--
Best regards,
Liu Hao

From 895f17608aab6d04bb0254ab58ad2bbe98ecc8fe Mon Sep 17 00:00:00 2001
From: Liu Hao <[email protected]>
Date: Sun, 25 Apr 2021 00:20:47 +0800
Subject: [PATCH] crt: Implement `at_quick_exit()`

`at_quick_exit()` was added in 7dda261ef062073eed4ed5b46effa3edd4a658fc.
However it is not exported from any DLL, so we have to implement it
ourselves.

This matches Microsoft UCRT implementation and our `_onexit()`.

Signed-off-by: Liu Hao <[email protected]>
---
 mingw-w64-crt/crt/ucrtbase_compat.c     | 8 ++++++++
 mingw-w64-headers/crt/corecrt_startup.h | 2 ++
 2 files changed, 10 insertions(+)

diff --git a/mingw-w64-crt/crt/ucrtbase_compat.c 
b/mingw-w64-crt/crt/ucrtbase_compat.c
index d04f5f23..e5cfe9a2 100644
--- a/mingw-w64-crt/crt/ucrtbase_compat.c
+++ b/mingw-w64-crt/crt/ucrtbase_compat.c
@@ -47,6 +47,7 @@ _CRTIMP char*** __cdecl __p__environ(void);
 _CRTIMP wchar_t*** __cdecl __p__wenviron(void);
 
 _CRTIMP int __cdecl _crt_atexit(_onexit_t func);
+_CRTIMP int __cdecl _crt_at_quick_exit(_onexit_t func);
 
 _CRTIMP int __cdecl _initialize_narrow_environment(void);
 _CRTIMP int __cdecl _initialize_wide_environment(void);
@@ -89,6 +90,13 @@ _onexit_t __cdecl _onexit(_onexit_t func)
 
 _onexit_t __cdecl (*__MINGW_IMP_SYMBOL(_onexit))(_onexit_t func) = _onexit;
 
+int __cdecl at_quick_exit(_onexit_t func)
+{
+  return _crt_at_quick_exit(func);
+}
+
+int __cdecl (*__MINGW_IMP_SYMBOL(at_quick_exit))(_onexit_t func) = 
at_quick_exit;
+
 void __cdecl _amsg_exit(int ret) {
   fprintf(stderr, "runtime error %d\n", ret);
 }
diff --git a/mingw-w64-headers/crt/corecrt_startup.h 
b/mingw-w64-headers/crt/corecrt_startup.h
index 2f47cb51..e1732e7f 100644
--- a/mingw-w64-headers/crt/corecrt_startup.h
+++ b/mingw-w64-headers/crt/corecrt_startup.h
@@ -32,6 +32,8 @@ typedef int (__cdecl *_onexit_t)(void);
 _CRTIMP int __cdecl _initialize_onexit_table(_onexit_table_t*);
 _CRTIMP int __cdecl _register_onexit_function(_onexit_table_t*,_onexit_t);
 _CRTIMP int __cdecl _execute_onexit_table(_onexit_table_t*);
+_CRTIMP int __cdecl _crt_atexit(_PVFV);
+_CRTIMP int __cdecl _crt_at_quick_exit(_PVFV);
 
 #ifdef __cplusplus
 }
-- 
2.31.1

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to