From 097bd72e2ea6351108205eb4dbc35a6c4408207b Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 8 Dec 2017 17:27:39 +0100 Subject: shared: add nm_utils_named_values_from_str_dict() NMUtilsNamedValue's purpose is precisely to create a list and sort by entires. Add nm_utils_named_values_from_str_dict() as helper function to do that. --- shared/nm-utils/nm-shared-utils.c | 33 +++++++++++++++++++++++++++++++++ shared/nm-utils/nm-shared-utils.h | 2 ++ 2 files changed, 35 insertions(+) diff --git a/shared/nm-utils/nm-shared-utils.c b/shared/nm-utils/nm-shared-utils.c index 0b343afdf8..732ce23bd7 100644 --- a/shared/nm-utils/nm-shared-utils.c +++ b/shared/nm-utils/nm-shared-utils.c @@ -1115,3 +1115,36 @@ nm_utils_fd_read_loop_exact (int fd, void *buf, size_t nbytes, bool do_poll) return 0; } + +NMUtilsNamedValue * +nm_utils_named_values_from_str_dict (GHashTable *hash, guint *out_len) +{ + GHashTableIter iter; + NMUtilsNamedValue *values; + guint i, len; + + if ( !hash + || !(len = g_hash_table_size (hash))) { + NM_SET_OUT (out_len, 0); + return NULL; + } + + i = 0; + values = g_new (NMUtilsNamedValue, len + 1); + g_hash_table_iter_init (&iter, hash); + while (g_hash_table_iter_next (&iter, + (gpointer *) &values[i].name, + (gpointer *) &values[i].value_ptr)) + i++; + nm_assert (i == len); + values[i].name = NULL; + values[i].value_ptr = NULL; + + if (len > 1) { + g_qsort_with_data (values, len, sizeof (values[0]), + nm_utils_named_entry_cmp_with_data, NULL); + } + + NM_SET_OUT (out_len, len); + return values; +} diff --git a/shared/nm-utils/nm-shared-utils.h b/shared/nm-utils/nm-shared-utils.h index d6d829cd57..89ad8b8d48 100644 --- a/shared/nm-utils/nm-shared-utils.h +++ b/shared/nm-utils/nm-shared-utils.h @@ -435,6 +435,8 @@ typedef struct { #define nm_utils_named_entry_cmp nm_strcmp_p #define nm_utils_named_entry_cmp_with_data nm_strcmp_p_with_data +NMUtilsNamedValue *nm_utils_named_values_from_str_dict (GHashTable *hash, guint *out_len); + /*****************************************************************************/ #define NM_UTILS_NS_PER_SECOND ((gint64) 1000000000) -- cgit v1.2.1