diff options
author | Thomas Haller <thaller@redhat.com> | 2018-03-25 14:16:07 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-03-27 09:58:00 +0200 |
commit | 938d9a82cf3cc1dce5a30914db925ae2d3dbe54c (patch) | |
tree | 046633e801d9505fadce07ff3af869d91e6605dd | |
parent | d7b1a911d913a2b6f5b26bcab01965e3a533081d (diff) | |
download | NetworkManager-938d9a82cf3cc1dce5a30914db925ae2d3dbe54c.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); |