diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-private-boxed-types.c | 36 | ||||
-rw-r--r-- | src/mm-private-boxed-types.h | 3 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/mm-private-boxed-types.c b/src/mm-private-boxed-types.c index ad9d62d1..1f5d6a8b 100644 --- a/src/mm-private-boxed-types.c +++ b/src/mm-private-boxed-types.c @@ -50,3 +50,39 @@ mm_uint16_array_get_type (void) return g_define_type_id__volatile; } + + +static gpointer * +pointer_array_copy (gpointer *array) +{ + gpointer *dup; + guint i; + + if (!array) + return NULL; + + /* Get NULL-terminated array size */ + for (i = 0; array[i]; i++); + + dup = g_new (gpointer, i + 1); + memcpy (dup, array, i * sizeof (gpointer)); + dup[i] = NULL; + return dup; +} + +GType +mm_pointer_array_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + + if (g_once_init_enter (&g_define_type_id__volatile)) { + GType g_define_type_id = + g_boxed_type_register_static (g_intern_static_string ("MMPointerArray"), + (GBoxedCopyFunc) pointer_array_copy, + (GBoxedFreeFunc) g_free); + + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + + return g_define_type_id__volatile; +} diff --git a/src/mm-private-boxed-types.h b/src/mm-private-boxed-types.h index e13aaf9d..661ce991 100644 --- a/src/mm-private-boxed-types.h +++ b/src/mm-private-boxed-types.h @@ -23,6 +23,9 @@ G_BEGIN_DECLS GType mm_uint16_array_get_type (void) G_GNUC_CONST; #define MM_TYPE_UINT16_ARRAY (mm_uint16_array_get_type ()) +GType mm_pointer_array_get_type (void) G_GNUC_CONST; +#define MM_TYPE_POINTER_ARRAY (mm_pointer_array_get_type ()) + G_END_DECLS #endif /* __MM_PRIVATE_BOXED_TYPES_H__ */ |