summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Rockai <prockai@redhat.com>2014-11-18 23:39:11 +0100
committerPetr Rockai <prockai@redhat.com>2014-11-20 16:51:06 +0100
commit956c19284195f3200a1370166bd8847e5d159588 (patch)
tree7c67c78f09e426762c0ec03c24a4d1cecbd9b858
parent687029cbbd5b97d545363b4f7448b5a1fe71f3c5 (diff)
downloadlvm2-956c19284195f3200a1370166bd8847e5d159588.tar.gz
libdm-config: Re-link config trees to reflect file order of keys/sections.
-rw-r--r--libdm/libdm-config.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/libdm/libdm-config.c b/libdm/libdm-config.c
index 4965e3229..c02638513 100644
--- a/libdm/libdm-config.c
+++ b/libdm/libdm-config.c
@@ -154,6 +154,24 @@ struct dm_config_tree *dm_config_insert_cascaded_tree(struct dm_config_tree *fir
return first_cft;
}
+static struct dm_config_node *_config_reverse(struct dm_config_node *head)
+{
+ if (!head)
+ return NULL;
+
+ struct dm_config_node *left = head, *middle = NULL, *right = NULL;
+
+ do {
+ right = middle;
+ middle = left;
+ left = left->sib;
+ middle->sib = right;
+ middle->child = _config_reverse(middle->child);
+ } while (left);
+
+ return middle;
+};
+
int dm_config_parse(struct dm_config_tree *cft, const char *start, const char *end)
{
/* TODO? if (start == end) return 1; */
@@ -172,6 +190,8 @@ int dm_config_parse(struct dm_config_tree *cft, const char *start, const char *e
if (!(cft->root = _file(p)))
return_0;
+ cft->root = _config_reverse(cft->root);
+
return 1;
}