Reactos
1//
2// _onexit.c
3//
4// Copyright (c) 2024 Timo Kreuzer
5//
6// Implementation of _onexit.
7//
8// SPDX-License-Identifier: MIT
9//
10
11#include <stdlib.h>
12#include <internal_shared.h>
13#include <corecrt_startup.h>
14#include <assert.h>
15
16_onexit_table_t module_local_atexit_table;
17int module_local_atexit_table_initialized = 0;
18
19int __cdecl __scrt_initialize_onexit(void)
20{
21 _initialize_onexit_table(&module_local_atexit_table);
22 module_local_atexit_table_initialized = 1;
23 return 0;
24}
25
26// CRT startup initializer
27_CRTALLOC(".CRT$XIAA") _PIFV const __scrt_onexit_initializer = __scrt_initialize_onexit;
28
29_onexit_t __cdecl _onexit(_In_opt_ _onexit_t _Func)
30{
31 assert(module_local_atexit_table_initialized == 1);
32 int result = _register_onexit_function(&module_local_atexit_table, _Func);
33 return (result == 0) ? _Func : NULL;
34}