From: Hans de Goede Date: Sat, 28 Sep 2019 20:31:38 +0000 (+0200) Subject: key-file: Add support for non ini style config files X-Git-Tag: 0.9.5~34^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c00955ce03d10597d31b089f4abc0a2bf9acb8d2;p=thirdparty%2Fplymouth.git key-file: Add support for non ini style config files In some cases me way want to parse key=value style config files from outside of plymouth which lack ini style groups. This commit adds a new ply_key_file_load_groupless_file function which supports loading such files. When a file is loaded this way, NULL must be passed as group_name for subsequent ply_key_file_get_* calls. Signed-off-by: Hans de Goede --- diff --git a/src/libply/ply-key-file.c b/src/libply/ply-key-file.c index 7c0dc44d..de9eb252 100644 --- a/src/libply/ply-key-file.c +++ b/src/libply/ply-key-file.c @@ -60,6 +60,7 @@ struct _ply_key_file FILE *fp; ply_hashtable_t *groups; + ply_key_file_group_t *groupless_group; }; typedef struct @@ -152,6 +153,8 @@ ply_key_file_free (ply_key_file_t *key_file) ply_key_file_free_group, NULL); + if (key_file->groupless_group) + ply_key_file_free_group (NULL, key_file->groupless_group, NULL); ply_hashtable_free (key_file->groups); free (key_file->filename); @@ -303,6 +306,9 @@ static ply_key_file_group_t * ply_key_file_find_group (ply_key_file_t *key_file, const char *group_name) { + if (!group_name) + return key_file->groupless_group; + return ply_hashtable_lookup (key_file->groups, (void *) group_name); } @@ -463,4 +469,18 @@ ply_key_file_foreach_entry (ply_key_file_t *key_file, &func_data); } +bool +ply_key_file_load_groupless_file (ply_key_file_t *key_file) +{ + if (!ply_key_file_open_file (key_file)) + return false; + + key_file->groupless_group = + ply_key_file_load_group (key_file, "NONE"); + + ply_key_file_close_file (key_file); + + return key_file->groupless_group != NULL; +} + /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */ diff --git a/src/libply/ply-key-file.h b/src/libply/ply-key-file.h index 31f3fd1f..668b8db9 100644 --- a/src/libply/ply-key-file.h +++ b/src/libply/ply-key-file.h @@ -36,6 +36,11 @@ typedef void (ply_key_file_foreach_func_t) (const char *group_name, ply_key_file_t *ply_key_file_new (const char *filename); void ply_key_file_free (ply_key_file_t *key_file); bool ply_key_file_load (ply_key_file_t *key_file); +/* For loading key=value pair files, which do not have ini style groups. + * When a file is loaded this way, NULL must be passed as group_name + * for subsequent ply_key_file_get_* calls. + */ +bool ply_key_file_load_groupless_file (ply_key_file_t *key_file); bool ply_key_file_has_key (ply_key_file_t *key_file, const char *group_name, const char *key);