]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Allow empty section name.
authorTimo Sirainen <tss@iki.fi>
Wed, 23 Jun 2004 16:36:18 +0000 (19:36 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 23 Jun 2004 16:36:18 +0000 (19:36 +0300)
--HG--
branch : HEAD

src/lib-settings/settings.c

index ecdbcea573ab39e39c23b4b7f7604feb738d792b..16e03d5d53ad6c542516e7d307851e2ec39ee701 100644 (file)
@@ -124,7 +124,7 @@ int settings_read(const char *path, const char *section,
                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 @@ int settings_read(const char *path, const char *section,
                        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 @@ int settings_read(const char *path, const char *section,
 
                        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 != '\0') {
-                               *line++ = '\0';
-                               while (IS_WHITE(*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 != '{')
@@ -207,6 +195,25 @@ int settings_read(const char *path, const char *section,
                                                               &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) {