From 8287312c294b7e125cabe1bb0238156049a725cd Mon Sep 17 00:00:00 2001 From: Andrew Gregory Date: Mon, 22 Jul 2013 02:46:47 -0400 Subject: conf.c: move directive parsing out of _parseconfig Include directives no longer have to be within a section. Signed-off-by: Andrew Gregory Signed-off-by: Allan McRae --- src/pacman/conf.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/pacman/conf.c b/src/pacman/conf.c index ca49749d..a9b00965 100644 --- a/src/pacman/conf.c +++ b/src/pacman/conf.c @@ -841,6 +841,25 @@ cleanup: return ret; } +static int _parse_directive(const char *file, int linenum, + char *key, char *value, struct section_t *section) +{ + if(section->name == NULL) { + pm_printf(ALPM_LOG_ERROR, _("config file %s, line %d: All directives must belong to a section.\n"), + file, linenum); + return 1; + } + + if(section->parse_options && section->is_options) { + /* we are either in options ... */ + return _parse_options(key, value, file, linenum); + } else if(!section->parse_options && !section->is_options) { + /* ... or in a repo section */ + return _parse_repo(key, value, file, linenum, section); + } + return 0; +} + /** The "real" parseconfig. Each "Include" directive will recall this method so * recursion and stack depth are limited to 10 levels. The publicly visible * parseconfig calls this with a NULL section argument so we can recall from @@ -928,13 +947,6 @@ static int _parseconfig(const char *file, struct section_t *section, int depth) ret = 1; goto cleanup; } - /* For each directive, compare to the camelcase string. */ - if(section->name == NULL) { - pm_printf(ALPM_LOG_ERROR, _("config file %s, line %d: All directives must belong to a section.\n"), - file, linenum); - ret = 1; - goto cleanup; - } /* Include is allowed in both options and repo sections */ if(strcmp(key, "Include") == 0) { glob_t globbuf; @@ -976,16 +988,8 @@ static int _parseconfig(const char *file, struct section_t *section, int depth) globfree(&globbuf); continue; } - if(section->parse_options && section->is_options) { - /* we are either in options ... */ - if((ret = _parse_options(key, value, file, linenum)) != 0) { - goto cleanup; - } - } else if(!section->parse_options && !section->is_options) { - /* ... or in a repo section */ - if((ret = _parse_repo(key, value, file, linenum, section)) != 0) { - goto cleanup; - } + if((ret = _parse_directive(file, linenum, key, value, section)) != 0) { + goto cleanup; } } -- cgit v1.2.3-70-g09d2