summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-03-25 14:16:07 +0200
committerThomas Haller <thaller@redhat.com>2018-03-27 09:58:00 +0200
commit938d9a82cf3cc1dce5a30914db925ae2d3dbe54c (patch)
tree046633e801d9505fadce07ff3af869d91e6605dd
parentd7b1a911d913a2b6f5b26bcab01965e3a533081d (diff)
downloadNetworkManager-938d9a82cf3cc1dce5a30914db925ae2d3dbe54c.tar.gz
shared: add nm_utils_hash_keys_to_array() helper
-rw-r--r--shared/nm-utils/nm-shared-utils.c39
-rw-r--r--shared/nm-utils/nm-shared-utils.h18
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);