summaryrefslogtreecommitdiff
path: root/libs/cpp
diff options
context:
space:
mode:
authorAetias <aetias@outlook.com>2024-04-20 14:01:33 +0200
committerAetias <aetias@outlook.com>2024-04-20 14:01:33 +0200
commitd994c9ee4b153c72757bed21e480e849448aeb5f (patch)
tree1b1503f1cdffe9a3ca326d30a768f0d02ea8cc67 /libs/cpp
parent9a7bc06baa5dadd2632b550e3cf92a1aa13530a5 (diff)
parente54e6a277cbdcd3830e9258be2577fe974e51b1a (diff)
Merge branch 'main' into item-manager
Diffstat (limited to 'libs/cpp')
-rw-r--r--libs/cpp/include/global_destructor_chain.h10
-rw-r--r--libs/cpp/src/__register_global_object.c13
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;
+}