diff options
author | Thomas Haller <thaller@redhat.com> | 2018-03-25 14:16:07 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-03-26 07:45:02 +0200 |
commit | 1d11935a71c70a3b0d6b0484477ae0f6dea76301 (patch) | |
tree | 992e622998684cc4830a81b8dfe0b12b2dd03eb4 | |
parent | 759c8de73d53b0911d665eed0969cbbf899d5b89 (diff) | |
download | NetworkManager-1d11935a71c70a3b0d6b0484477ae0f6dea76301.tar.gz |
shared: add nm_utils_hash_keys_to_array() helper
-rw-r--r-- | shared/nm-utils/nm-shared-utils.c | 39 | ||||
-rw-r--r-- | shared/nm-utils/nm-shared-utils.h | 18 |
2 files changed, 36 insertions, 21 deletions
diff --git a/shared/nm-utils/nm-shared-utils.c b/shared/nm-utils/nm-shared-utils.c index 25b867538c..556594aca3 100644 --- a/shared/nm-utils/nm-shared-utils.c +++ b/shared/nm-utils/nm-shared-utils.c @@ -1149,31 +1149,34 @@ nm_utils_named_values_from_str_dict (GHashTable *hash, guint *out_len) return values; } -const char ** -nm_utils_strdict_get_keys (const GHashTable *hash, - gboolean sorted, - guint *out_length) +gpointer * +nm_utils_hash_keys_to_array (GHashTable *hash, + GCompareDataFunc compare_func, + gpointer user_data, + guint *out_len) { - const char **names; - guint length; + guint len; + gpointer *keys; + /* by convention, we never return an empty array. In that + * case, always %NULL. */ if ( !hash - || !g_hash_table_size ((GHashTable *) hash)) { - NM_SET_OUT (out_length, 0); + || g_hash_table_size (hash) == 0) { + NM_SET_OUT (out_len, 0); return NULL; } - names = (const char **) g_hash_table_get_keys_as_array ((GHashTable *) hash, &length); - if ( sorted - && length > 1) { - g_qsort_with_data (names, - length, - sizeof (char *), - nm_strcmp_p_with_data, - NULL); + keys = g_hash_table_get_keys_as_array (hash, &len); + if ( len > 1 + && compare_func) { + g_qsort_with_data (keys, + len, + sizeof (gpointer), + compare_func, + user_data); } - NM_SET_OUT (out_length, length); - return names; + NM_SET_OUT (out_len, len); + return keys; } char ** diff --git a/shared/nm-utils/nm-shared-utils.h b/shared/nm-utils/nm-shared-utils.h index 122f1187bd..37f0621389 100644 --- a/shared/nm-utils/nm-shared-utils.h +++ b/shared/nm-utils/nm-shared-utils.h @@ -460,9 +460,21 @@ typedef struct { NMUtilsNamedValue *nm_utils_named_values_from_str_dict (GHashTable *hash, guint *out_len); -const char **nm_utils_strdict_get_keys (const GHashTable *hash, - gboolean sorted, - guint *out_length); +gpointer *nm_utils_hash_keys_to_array (GHashTable *hash, + GCompareDataFunc compare_func, + gpointer user_data, + guint *out_len); + +static inline const char ** +nm_utils_strdict_get_keys (const GHashTable *hash, + gboolean sorted, + guint *out_length) +{ + return (const char **) nm_utils_hash_keys_to_array ((GHashTable *) hash, + sorted ? nm_strcmp_p_with_data : NULL, + NULL, + out_length); +} char **nm_utils_strv_make_deep_copied (const char **strv); |