aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-private-boxed-types.c36
-rw-r--r--src/mm-private-boxed-types.h3
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__ */