]> wolfpit.net Git - tool/Arch-pacman/.git/commitdiff
conf.c: move directive parsing out of _parseconfig
authorAndrew Gregory <andrew.gregory.8@gmail.com>
Mon, 22 Jul 2013 06:46:47 +0000 (02:46 -0400)
committerAllan McRae <allan@archlinux.org>
Wed, 21 Aug 2013 01:06:41 +0000 (11:06 +1000)
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>
src/pacman/conf.c

index ca49749dadfadd10c7d2314a51ebe2f9242860a7..a9b00965189b716d21785be64a9821209b414591 100644 (file)
@@ -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;
                }
        }