diff options
author | Petr Rockai <prockai@redhat.com> | 2014-11-18 23:39:11 +0100 |
---|---|---|
committer | Petr Rockai <prockai@redhat.com> | 2014-11-20 16:51:06 +0100 |
commit | 956c19284195f3200a1370166bd8847e5d159588 (patch) | |
tree | 7c67c78f09e426762c0ec03c24a4d1cecbd9b858 | |
parent | 687029cbbd5b97d545363b4f7448b5a1fe71f3c5 (diff) | |
download | lvm2-956c19284195f3200a1370166bd8847e5d159588.tar.gz |
libdm-config: Re-link config trees to reflect file order of keys/sections.
-rw-r--r-- | libdm/libdm-config.c | 20 |
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; } |