diff options
author | Thomas Haller <thaller@redhat.com> | 2018-04-17 15:24:45 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-04-24 09:03:39 +0200 |
commit | dc138da420bd42b9593dcb38f8581ca0cd2a0e3f (patch) | |
tree | 9bf32029a6e256de7fb61bf6c7f8a61563167b02 | |
parent | 45fe57aea4319bef1696395f7c85253d7c117019 (diff) | |
download | NetworkManager-dc138da420bd42b9593dcb38f8581ca0cd2a0e3f.tar.gz |
shared: add nm_utils_user_data_pack() and unpack helpers
-rw-r--r-- | shared/nm-utils/nm-shared-utils.c | 41 | ||||
-rw-r--r-- | shared/nm-utils/nm-shared-utils.h | 12 |
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__ */ |