Переглянути джерело

complain about global options following sections

while harmless for most options, such usage is counter to the
documentation, and actually breaks CopyArrivalDate, MaxMessages, and
ExpireUnread.
Oswald Buddenhagen 4 роки тому
батько
коміт
217764bd35
1 змінених файлів з 12 додано та 1 видалено
  1. 12 1
      src/config.c

+ 12 - 1
src/config.c

@@ -326,7 +326,7 @@ load_config( const char *where )
 	string_list_t *chanlist, **chanlistapp;
 	char *arg, *p;
 	uint len, max_size;
-	int cops, gcops, fn, i;
+	int cops, gcops, glob_ok, fn, i;
 	char path[_POSIX_PATH_MAX];
 	char buf[1024];
 
@@ -351,6 +351,7 @@ load_config( const char *where )
 	cfile.rest = NULL;
 
 	gcops = 0;
+	glob_ok = 1;
 	global_conf.expire_unread = -1;
   reloop:
 	while (getcline( &cfile )) {
@@ -367,6 +368,7 @@ load_config( const char *where )
 					storeapp = &store->next;
 					*storeapp = NULL;
 				}
+				glob_ok = 0;
 				goto reloop;
 			}
 		if (!strcasecmp( "Channel", cfile.cmd ))
@@ -444,6 +446,8 @@ load_config( const char *where )
 				*channelapp = channel;
 				channelapp = &channel->next;
 			}
+			glob_ok = 0;
+			goto reloop;
 		}
 		else if (!strcasecmp( "Group", cfile.cmd ))
 		{
@@ -477,6 +481,8 @@ load_config( const char *where )
 					cfile.err = 1;
 				}
 			}
+			glob_ok = 0;
+			goto reloop;
 		}
 		else if (!strcasecmp( "FSync", cfile.cmd ))
 		{
@@ -513,6 +519,11 @@ load_config( const char *where )
 					goto reloop;
 			break;
 		}
+		if (!glob_ok) {
+			error( "%s:%d: global options may not follow sections\n",
+			       cfile.file, cfile.line );
+			cfile.err = 1;
+		}
 	}
 	fclose (cfile.fp);
 	if (cfile.ms_warn)