Browse Source

aggregate all (two ...) drivers in an array instead of naming them in
each (one ...) location explicitly.

Oswald Buddenhagen 19 năm trước cách đây
mục cha
commit
861dd7468e
2 tập tin đã thay đổi với 17 bổ sung12 xóa
  1. 14 12
      src/config.c
  2. 3 0
      src/isync.h

+ 14 - 12
src/config.c

@@ -32,6 +32,8 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+driver_t *drivers[N_DRIVERS] = { &maildir_driver, &imap_driver };
+
 store_conf_t *stores;
 channel_conf_t *channels;
 group_conf_t *groups;
@@ -256,7 +258,7 @@ load_config( const char *where, int pseudo )
 	group_conf_t *group, **groupapp = &groups;
 	string_list_t *chanlist, **chanlistapp;
 	char *arg, *p;
-	int err, len, cops, gcops, max_size, ms;
+	int err, len, cops, gcops, max_size, ms, i;
 	char path[_POSIX_PATH_MAX];
 	char buf[1024];
 
@@ -283,18 +285,18 @@ load_config( const char *where, int pseudo )
 	while (getcline( &cfile )) {
 		if (!cfile.cmd)
 			continue;
-		if (imap_driver.parse_store( &cfile, &store, &err ) ||
-		    maildir_driver.parse_store( &cfile, &store, &err ))
-		{
-			if (store) {
-				if (!store->path)
-					store->path = "";
-				*storeapp = store;
-				storeapp = &store->next;
-				*storeapp = 0;
+		for (i = 0; i < N_DRIVERS; i++)
+			if (drivers[i]->parse_store( &cfile, &store, &err )) {
+				if (store) {
+					if (!store->path)
+						store->path = "";
+					*storeapp = store;
+					storeapp = &store->next;
+					*storeapp = 0;
+				}
+				goto reloop;
 			}
-		}
-		else if (!strcasecmp( "Channel", cfile.cmd ))
+		if (!strcasecmp( "Channel", cfile.cmd ))
 		{
 			channel = nfcalloc( sizeof(*channel) );
 			channel->name = nfstrdup( cfile.val );

+ 3 - 0
src/isync.h

@@ -249,6 +249,9 @@ int sync_boxes( store_t *ctx[], const char *names[], channel_conf_t * );
 
 /* config.c */
 
+#define N_DRIVERS 2
+extern driver_t *drivers[N_DRIVERS];
+
 extern channel_conf_t *channels;
 extern group_conf_t *groups;
 extern int global_ops[2];