[pacman-dev] [PATCH 3/9] conf.c: move directive parsing out of _parseconfig

Andrew Gregory andrew.gregory.8 at gmail.com
Mon Jul 22 02:46:47 EDT 2013


Include directives no longer have to be within a section.

Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
---
 src/pacman/conf.c | 38 +++++++++++++++++++++-----------------
 1 file changed, 21 insertions(+), 17 deletions(-)

diff --git a/src/pacman/conf.c b/src/pacman/conf.c
index 765f369..caee55f 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;
 		}
 	}
 
-- 
1.8.3.3



More information about the pacman-dev mailing list