This change allow end of line comment and IMHO simplify parse_line function.
Signed-off-by: Clement Calmels <clement.calm...@fr.ibm.com> --- src/lxc/confile.c | 69 ++++++++++++++++++----------------------------------- 1 files changed, 23 insertions(+), 46 deletions(-) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 76fa9ac..91d54a9 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -745,59 +745,36 @@ static int config_utsname(const char *key, char *value, struct lxc_conf *lxc_con return 0; } -static int parse_line(char *buffer, void *data) +static int parse_line(char *line, void *data) { - struct config *config; - char *line, *linep; - char *dot; - char *key; - char *value; - int ret = -1; + char *key = NULL, *pound; + int ret, count = 0; - if (lxc_is_line_empty(buffer)) - return 0; + pound = index(line, '#'); + if (pound) /* chomp comment */ + *pound = '\0'; - /* we have to dup the buffer otherwise, at the re-exec for - * reboot we modified the original string on the stack by - * replacing '=' by '\0' below - */ - linep = line = strdup(buffer); - if (!line) { - SYSERROR("failed to allocate memory for '%s'", buffer); - return -1; - } - - line += lxc_char_left_gc(line, strlen(line)); - if (line[0] == '#') { - ret = 0; - goto out; - } + ret = sscanf(line, " %a[a-z0-9.] = %n", &key, &count); + if (ret == EOF) + /* empty line */ + return 0; - dot = strstr(line, "="); - if (!dot) { + if (ret == 1) { + struct config *config = getconfig(key); + char *value = &line[count]; + + if (!config) { + ret = -1; + ERROR("unknow key %s", key); + } else + ret = config->cb(key, value, data); + } else { + ret = -1; ERROR("invalid configuration line: %s", line); - goto out; } - *dot = '\0'; - value = dot + 1; - - key = line; - key[lxc_char_right_gc(key, strlen(key))] = '\0'; - - value += lxc_char_left_gc(value, strlen(value)); - value[lxc_char_right_gc(value, strlen(value))] = '\0'; - - config = getconfig(key); - if (!config) { - ERROR("unknow key %s", key); - goto out; - } - - ret = config->cb(key, value, data); - -out: - free(linep); + if (key) + free(key); return ret; } ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel