]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
key-file: Add support for non ini style config files
authorHans de Goede <hdegoede@redhat.com>
Sat, 28 Sep 2019 20:31:38 +0000 (22:31 +0200)
committerHans de Goede <hdegoede@redhat.com>
Mon, 30 Sep 2019 22:10:50 +0000 (00:10 +0200)
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 <hdegoede@redhat.com>
src/libply/ply-key-file.c
src/libply/ply-key-file.h

index 7c0dc44df30ed690556ee2f8f3d746d06ef33fbc..de9eb25231b1cfbae1b35b26c6f092de5891cb09 100644 (file)
@@ -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: */
index 31f3fd1fb592adb1a3761011beef1b078194b714..668b8db956a03196756e8e696ce3e6b39de369b0 100644 (file)
@@ -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);