summaryrefslogtreecommitdiff
path: root/src/nm-config-data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-config-data.c')
-rw-r--r--src/nm-config-data.c56
1 files changed, 41 insertions, 15 deletions
diff --git a/src/nm-config-data.c b/src/nm-config-data.c
index 0875e69bd7..c508d0e264 100644
--- a/src/nm-config-data.c
+++ b/src/nm-config-data.c
@@ -473,6 +473,7 @@ _nm_config_data_log_sort (const char **pa, const char **pb, gpointer dummy)
gboolean a_is_connection, b_is_connection;
gboolean a_is_device, b_is_device;
gboolean a_is_intern, b_is_intern;
+ gboolean a_is_main, b_is_main;
const char *a = *pa;
const char *b = *pb;
@@ -531,8 +532,12 @@ _nm_config_data_log_sort (const char **pa, const char **pb, gpointer dummy)
if (b_is_device && !a_is_device)
return -1;
- /* no reordering. */
- return 0;
+ a_is_main = nm_streq0 (a, "main");
+ b_is_main = nm_streq0 (b, "main");
+ if (a_is_main != b_is_main)
+ return a_is_main ? -1 : 1;
+
+ return g_strcmp0 (a, b);
}
static struct {
@@ -558,6 +563,8 @@ nm_config_data_log (const NMConfigData *self,
gsize ngroups;
guint g, k, i;
FILE *stream = print_stream;
+ gs_unref_ptrarray GPtrArray *groups_full = NULL;
+ gboolean print_default = !!stream;
g_return_if_fail (NM_IS_CONFIG_DATA (self));
@@ -583,18 +590,35 @@ nm_config_data_log (const NMConfigData *self,
if (!groups)
ngroups = 0;
- if (groups && groups[0]) {
- g_qsort_with_data (groups, ngroups,
- sizeof (char *),
- (GCompareDataFunc) _nm_config_data_log_sort,
- NULL);
+ groups_full = g_ptr_array_sized_new (ngroups + 5);
+
+ if (ngroups) {
+ g_ptr_array_set_size (groups_full, ngroups);
+ memcpy (groups_full->pdata, groups, sizeof (groups[0]) * ngroups);
+ g_ptr_array_sort_with_data (groups_full, (GCompareDataFunc) _nm_config_data_log_sort, NULL);
+ }
+
+ if (print_default) {
+ for (g = 0; g < G_N_ELEMENTS (default_values); g++) {
+ const char *group = default_values[g].group;
+ gssize idx;
+
+ idx = _nm_utils_array_find_binary_search ((gconstpointer *) groups_full->pdata,
+ sizeof (char *),
+ groups_full->len,
+ &group,
+ (GCompareDataFunc) _nm_config_data_log_sort,
+ NULL);
+ if (idx < 0)
+ g_ptr_array_insert (groups_full, (~idx), (gpointer) group);
+ }
}
if (!stream)
- _LOG (stream, prefix, "config-data[%p]: %lu groups", self, (unsigned long) ngroups);
+ _LOG (stream, prefix, "config-data[%p]: %u groups", self, groups_full->len);
- for (g = 0; g < ngroups; g++) {
- const char *group = groups[g];
+ for (g = 0; g < groups_full->len; g++) {
+ const char *group = groups_full->pdata[g];
gs_strfreev char **keys = NULL;
gboolean is_atomic;
@@ -604,11 +628,13 @@ nm_config_data_log (const NMConfigData *self,
_LOG (stream, prefix, "[%s]%s", group, is_atomic && !stream ? " # atomic section" : "");
/* Print default values as comments */
- for (i = 0; i < G_N_ELEMENTS (default_values); i++) {
- if ( nm_streq (default_values[i].group, group)
- && !g_key_file_has_key (priv->keyfile, group, default_values[i].key, NULL)) {
- _LOG (stream, prefix, "%s# %s=%s", key_prefix, default_values[i].key,
- default_values[i].value);
+ if (print_default) {
+ for (i = 0; i < G_N_ELEMENTS (default_values); i++) {
+ if ( nm_streq (default_values[i].group, group)
+ && !g_key_file_has_key (priv->keyfile, group, default_values[i].key, NULL)) {
+ _LOG (stream, prefix, "%s# %s=%s", key_prefix, default_values[i].key,
+ default_values[i].value);
+ }
}
}