mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-05 00:46:16 +01:00
Add glib-ctor functionality
A pair of macros to define a constructor function (on compilers that support such a concept) and to ensure that the function is run exactly once (on compilers that lack such support). Presently only GCC is implemented.
This commit is contained in:
parent
0e604ef0b5
commit
8f74c927f6
@ -147,6 +147,7 @@ libglib_2_0_la_SOURCES = \
|
||||
gkeyfile.c \
|
||||
glibintl.h \
|
||||
glib_trace.h \
|
||||
glib-ctor.h \
|
||||
glib-private.h \
|
||||
glib-private.c \
|
||||
glist.c \
|
||||
|
25
glib/glib-ctor.h
Normal file
25
glib/glib-ctor.h
Normal file
@ -0,0 +1,25 @@
|
||||
#ifndef __GLIB_CTOR_H__
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define GLIB_CTOR(func) \
|
||||
__attribute__((constructor)) static void func (void)
|
||||
#define GLIB_ENSURE_CTOR(func) G_STMT_START { } G_STMT_END
|
||||
#else
|
||||
/* could be vastly improved... */
|
||||
#define GLIB_CTOR(func) \
|
||||
static GMutex g__##func##_mutex = G_MUTEX_INIT; \
|
||||
static gboolean g__##func##_initialised; \
|
||||
static void func (void)
|
||||
#define GLIB_ENSURE_CTOR(func) \
|
||||
G_STMT_START { \
|
||||
g_mutex_lock (&g__##func##_mutex); \
|
||||
if (!g__##func##_initialised) \
|
||||
{ \
|
||||
g__##func##_initialised = TRUE; \
|
||||
func (); \
|
||||
} \
|
||||
g_mutex_unlock (&g__##func##_mutex); \
|
||||
} G_STMT_END
|
||||
#endif
|
||||
|
||||
#endif /* __GLIB_CTOR_H__ */
|
Loading…
Reference in New Issue
Block a user