diff options
Diffstat (limited to 'include/LibC++/base_process.h')
| -rw-r--r-- | include/LibC++/base_process.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/include/LibC++/base_process.h b/include/LibC++/base_process.h new file mode 100644 index 0000000..cb25aa1 --- /dev/null +++ b/include/LibC++/base_process.h @@ -0,0 +1,45 @@ +/* ======================================== + + Copyright (C) 2024-2025 Amlal El Mahrouss, Licensed under the Apache 2.0 license. + +======================================== */ + +#pragma once + +#include <LibC++/defines.h> + +__init_decl() + + /// @brief CRT exit, with exit code (!!! exits all threads. !!!) + /// @param code the exit code. + /// @return the return > 0 for non successful. + extern int exit_(int code); + +/// @brief CRT signal handler. +/// @param code the signal code. +extern void signal_(int code); + +extern void (*__atexit_cdecl_ptr)(void); +extern void (**__atexit_lst_ptr)(void); +extern size_t __atexit_lst_cnt; + +__fini_decl() + + /// @brief Standard C++ namespace + namespace std::base_process { + inline int signal(int code) { + signal_(code); + return -1; + } + + inline int32_t exit(const int32_t& code) { + for (auto idx = 0UL; idx < __atexit_lst_cnt; ++idx) { + __atexit_lst_ptr[idx](); + } + + if (__atexit_cdecl_ptr) __atexit_cdecl_ptr(); + + exit_(code); + return -1; + } +} // namespace std::base_process |
