changeset 2233:089d2cc59538 HEAD

Allow empty section name.
author Timo Sirainen <tss@iki.fi>
date Wed, 23 Jun 2004 19:36:18 +0300
parents e5684c8c60f9
children 60802bea8f32
files src/lib-settings/settings.c
diffstat 1 files changed, 35 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-settings/settings.c	Wed Jun 23 18:02:50 2004 +0300
+++ b/src/lib-settings/settings.c	Wed Jun 23 19:36:18 2004 +0300
@@ -124,7 +124,7 @@
 		line[len] = '\0';
 
 		/* a) key = value
-		   b) section_type section_name {
+		   b) section_type [section_name] {
 		   c) } */
 		key = line;
 		while (!IS_WHITE(*line) && *line != '\0' && *line != '=')
@@ -134,25 +134,8 @@
 			while (IS_WHITE(*line)) line++;
 		}
 
-		if (strcmp(key, "}") == 0 && *line == '\0') {
-			if (sections == 0)
-				errormsg = "Unexpected '}'";
-			else {
-				if (skip > 0)
-					skip--;
-				else {
-					sect_callback(NULL, NULL, context,
-						      &errormsg);
-					if (root_section == sections &&
-					    errormsg == NULL) {
-						/* we found the section,
-						   now quit */
-						break;
-					}
-				}
-				sections--;
-			}
-		} else if (*line == '=') {
+		if (*line == '=') {
+			/* a) */
 			*line++ = '\0';
 			while (IS_WHITE(*line)) line++;
 
@@ -166,17 +149,22 @@
 
 			errormsg = skip ? NULL :
 				callback(key, line, context);
-		} else {
+		} else if (strcmp(key, "}") != 0 || *line != '\0') {
+			/* b) + errors */
 			line[-1] = '\0';
 
-			name = line;
-			while (!IS_WHITE(*line) && *line != '\0')
-				line++;
+			if (*line == '{')
+				name = "";
+			else {
+				name = line;
+				while (!IS_WHITE(*line) && *line != '\0')
+					line++;
 
-			if (*line != '\0') {
-				*line++ = '\0';
-				while (IS_WHITE(*line))
-					line++;
+				if (*line != '\0') {
+					*line++ = '\0';
+					while (IS_WHITE(*line))
+						line++;
+				}
 			}
 
 			if (*line != '{')
@@ -207,6 +195,25 @@
 							       &errormsg);
 				}
 			}
+		} else {
+			/* c) */
+			if (sections == 0)
+				errormsg = "Unexpected '}'";
+			else {
+				if (skip > 0)
+					skip--;
+				else {
+					sect_callback(NULL, NULL, context,
+						      &errormsg);
+					if (root_section == sections &&
+					    errormsg == NULL) {
+						/* we found the section,
+						   now quit */
+						break;
+					}
+				}
+				sections--;
+			}
 		}
 
 		if (errormsg != NULL) {