diff options
author | Andrew Gregory <andrew.gregory.8@gmail.com> | 2013-07-22 02:46:47 -0400 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2013-08-21 11:06:41 +1000 |
commit | 8287312c294b7e125cabe1bb0238156049a725cd (patch) | |
tree | d7916af81c13fb590cbb8f68070aacbd4b0a1b5d | |
parent | 36f702ba826f2d3bebb4df3232c1b2b64a03f8a5 (diff) |
conf.c: move directive parsing out of _parseconfig
Include directives no longer have to be within a section.
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r-- | src/pacman/conf.c | 38 |
1 files changed, 21 insertions, 17 deletions
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; } } |