From: "Bryce Harrington" <[email protected]>

Adds weston_config_update(), which parses a condensed string of
comma-delimited key/value pairs and adds or changes the corresponding
parameters in the weston_config structure.

Signed-off-by: Bryce Harrington (http://osg.samsung.com) <[email protected]>
Signed-off-by: Bryce Harrington <[email protected]>
---
 shared/config-parser.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++---
 shared/config-parser.h |  6 +++++
 2 files changed, 75 insertions(+), 3 deletions(-)

diff --git a/shared/config-parser.c b/shared/config-parser.c
index 78039ba..0b60c2f 100644
--- a/shared/config-parser.c
+++ b/shared/config-parser.c
@@ -377,6 +377,20 @@ weston_config_get_libexec_dir(void)
 }
 
 struct weston_config *
+weston_config_create(void)
+{
+       struct weston_config *config;
+
+       config = malloc(sizeof *config);
+       if (config == NULL)
+               return NULL;
+
+       wl_list_init(&config->section_list);
+
+       return config;
+}
+
+struct weston_config *
 weston_config_parse(const char *name)
 {
        FILE *fp;
@@ -385,12 +399,10 @@ weston_config_parse(const char *name)
        struct weston_config_section *section = NULL;
        int i, fd;
 
-       config = malloc(sizeof *config);
+       config = weston_config_create();
        if (config == NULL)
                return NULL;
 
-       wl_list_init(&config->section_list);
-
        fd = open_config_file(config, name);
        if (fd == -1) {
                free(config);
@@ -449,6 +461,60 @@ weston_config_parse(const char *name)
        return config;
 }
 
+/* Parses a string of the form section.key=value,section.key=value
+ * and updates the provided config.
+ */
+bool
+weston_config_update(struct weston_config *config, char *line)
+{
+       char *p;
+       char *tok;
+       char *saveptr;
+       char *section_name;
+       char *key;
+       char *value;
+       struct weston_config_section *section = NULL;
+
+       tok = strtok_r(line, ",", &saveptr);
+       while (tok != NULL) {
+               p = strchr(tok, '.');
+               p[0] = '\0';
+               section_name = strdup(tok);
+               tok = p+1;
+
+               p = strchr(tok, '=');
+               p[0] = '\0';
+               key = strdup(tok);
+               value = p+1;
+
+               section = weston_config_get_section(config, section_name, NULL, 
NULL);
+               if (section == NULL) {
+                       section = config_add_section(config, section_name);
+                       if (section == NULL) {
+                               fprintf(stderr, "could not add section %s\n", 
section_name);
+                               free(section_name);
+                               free(key);
+                               return false;
+                       }
+               }
+               if (!weston_config_section_set(section, key, value)) {
+                       fprintf(stderr, "could not set %s to %s in section 
%s\n",
+                               key, value, section_name);
+                       free(section_name);
+                       free(key);
+                       return false;
+               }
+
+               free(section_name);
+               free(key);
+
+               tok = strtok_r(NULL, ",", &saveptr);
+       }
+
+       return true;
+}
+
+
 const char *
 weston_config_get_full_path(struct weston_config *config)
 {
diff --git a/shared/config-parser.h b/shared/config-parser.h
index e47c54a..d70b0a0 100644
--- a/shared/config-parser.h
+++ b/shared/config-parser.h
@@ -101,8 +101,14 @@ const char *
 weston_config_get_libexec_dir(void);
 
 struct weston_config *
+weston_config_create(void);
+
+struct weston_config *
 weston_config_parse(const char *name);
 
+bool
+weston_config_update(struct weston_config *config, char *line);
+
 const char *
 weston_config_get_full_path(struct weston_config *config);
 
-- 
1.9.1

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to