diff options
| author | Aetias <aetias@outlook.com> | 2024-04-20 14:01:33 +0200 |
|---|---|---|
| committer | Aetias <aetias@outlook.com> | 2024-04-20 14:01:33 +0200 |
| commit | d994c9ee4b153c72757bed21e480e849448aeb5f (patch) | |
| tree | 1b1503f1cdffe9a3ca326d30a768f0d02ea8cc67 /libs/cpp | |
| parent | 9a7bc06baa5dadd2632b550e3cf92a1aa13530a5 (diff) | |
| parent | e54e6a277cbdcd3830e9258be2577fe974e51b1a (diff) | |
Merge branch 'main' into item-manager
Diffstat (limited to 'libs/cpp')
| -rw-r--r-- | libs/cpp/include/global_destructor_chain.h | 10 | ||||
| -rw-r--r-- | libs/cpp/src/__register_global_object.c | 13 |
2 files changed, 23 insertions, 0 deletions
diff --git a/libs/cpp/include/global_destructor_chain.h b/libs/cpp/include/global_destructor_chain.h new file mode 100644 index 00000000..5939216e --- /dev/null +++ b/libs/cpp/include/global_destructor_chain.h @@ -0,0 +1,10 @@ +#pragma once + +typedef struct DestructorChain { + /* 0 */ struct DestructorChain *next; + /* 4 */ void *destructor; + /* 8 */ void *object; + /* c */ +} DestructorChain; + +void* __register_global_object(void *object, void *destructor, DestructorChain *link); diff --git a/libs/cpp/src/__register_global_object.c b/libs/cpp/src/__register_global_object.c new file mode 100644 index 00000000..9571faef --- /dev/null +++ b/libs/cpp/src/__register_global_object.c @@ -0,0 +1,13 @@ +#include "global_destructor_chain.h" + +#define CALL_DTOR(dtor, obj) (((void (*)(void*, int))(dtor))((obj), -1)) + +DestructorChain *__global_destructor_chain; + +void* __register_global_object(void *object, void *destructor, DestructorChain *link) { + link->next = __global_destructor_chain; + link->destructor = destructor; + link->object = object; + __global_destructor_chain = link; + return object; +} |
