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
