summaryrefslogtreecommitdiff
path: root/shared
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-04-17 15:24:45 +0200
committerThomas Haller <thaller@redhat.com>2018-04-24 09:03:39 +0200
commitdc138da420bd42b9593dcb38f8581ca0cd2a0e3f (patch)
tree9bf32029a6e256de7fb61bf6c7f8a61563167b02 /shared
parent45fe57aea4319bef1696395f7c85253d7c117019 (diff)
downloadNetworkManager-dc138da420bd42b9593dcb38f8581ca0cd2a0e3f.tar.gz
shared: add nm_utils_user_data_pack() and unpack helpers
Diffstat (limited to 'shared')
-rw-r--r--shared/nm-utils/nm-shared-utils.c41
-rw-r--r--shared/nm-utils/nm-shared-utils.h12
2 files changed, 53 insertions, 0 deletions
diff --git a/shared/nm-utils/nm-shared-utils.c b/shared/nm-utils/nm-shared-utils.c
index 6937065c25..aad1b3ddda 100644
--- a/shared/nm-utils/nm-shared-utils.c
+++ b/shared/nm-utils/nm-shared-utils.c
@@ -1359,3 +1359,44 @@ _nm_utils_strv_sort (const char **strv, gssize len)
nm_strcmp_p_with_data,
NULL);
}
+
+/*****************************************************************************/
+
+gpointer
+_nm_utils_user_data_pack (int nargs, gconstpointer *args)
+{
+ int i;
+ gpointer *data;
+
+ nm_assert (nargs > 0);
+ nm_assert (args);
+
+ data = g_slice_alloc (((gsize) nargs) * sizeof (gconstpointer));
+ for (i = 0; i < nargs; i++)
+ data[i] = (gpointer) args[i];
+ return data;
+}
+
+void
+_nm_utils_user_data_unpack (gpointer user_data, int nargs, ...)
+{
+ gpointer *data = user_data;
+ va_list ap;
+ int i;
+
+ nm_assert (data);
+ nm_assert (nargs > 0);
+
+ va_start (ap, nargs);
+ for (i = 0; i < nargs; i++) {
+ gpointer *dst;
+
+ dst = va_arg (ap, gpointer *);
+ nm_assert (dst);
+
+ *dst = data[i];
+ }
+ va_end (ap);
+
+ g_slice_free1 (((gsize) nargs) * sizeof (gconstpointer), user_data);
+}
diff --git a/shared/nm-utils/nm-shared-utils.h b/shared/nm-utils/nm-shared-utils.h
index 84325bb729..5ee83eb877 100644
--- a/shared/nm-utils/nm-shared-utils.h
+++ b/shared/nm-utils/nm-shared-utils.h
@@ -611,4 +611,16 @@ guint64 nm_utils_get_start_time_for_pid (pid_t pid, char *out_state, pid_t *out_
/*****************************************************************************/
+gpointer _nm_utils_user_data_pack (int nargs, gconstpointer *args);
+
+#define nm_utils_user_data_pack(...) \
+ _nm_utils_user_data_pack(NM_NARG (__VA_ARGS__), (gconstpointer[]) { __VA_ARGS__ })
+
+void _nm_utils_user_data_unpack (gpointer user_data, int nargs, ...);
+
+#define nm_utils_user_data_unpack(user_data, ...) \
+ _nm_utils_user_data_unpack(user_data, NM_NARG (__VA_ARGS__), __VA_ARGS__)
+
+/*****************************************************************************/
+
#endif /* __NM_SHARED_UTILS_H__ */