Browse Source

remove own_store() function from driver model

the drivers which support it can abstract it inside open_store() just
fine.
Oswald Buddenhagen 11 years ago
parent
commit
0b32734693
4 changed files with 11 additions and 33 deletions
  1. 7 15
      src/drv_imap.c
  2. 0 7
      src/drv_maildir.c
  3. 0 3
      src/isync.h
  4. 4 8
      src/main.c

+ 7 - 15
src/drv_imap.c

@@ -1351,7 +1351,7 @@ imap_invoke_bad_callback( imap_store_t *ctx )
 	ctx->gen.bad_callback( ctx->gen.bad_callback_aux );
 }
 
-/******************* imap_disown_store & imap_own_store *******************/
+/******************* imap_disown_store *******************/
 
 static store_t *unowned;
 
@@ -1378,19 +1378,6 @@ imap_disown_store( store_t *gctx )
 	unowned = gctx;
 }
 
-static store_t *
-imap_own_store( store_conf_t *conf )
-{
-	store_t *store, **storep;
-
-	for (storep = &unowned; (store = *storep); storep = &store->next)
-		if (store->conf == conf) {
-			*storep = store->next;
-			return store;
-		}
-	return 0;
-}
-
 /******************* imap_cleanup *******************/
 
 static void imap_cleanup_p2( imap_store_t *, struct imap_cmd *, int );
@@ -1470,6 +1457,12 @@ imap_open_store( store_conf_t *conf,
 	imap_store_t *ctx;
 	store_t **ctxp;
 
+	for (ctxp = &unowned; (ctx = (imap_store_t *)*ctxp); ctxp = &ctx->gen.next)
+		if (ctx->gen.conf == conf) {
+			*ctxp = ctx->gen.next;
+			cb( &ctx->gen, aux );
+			return;
+		}
 	for (ctxp = &unowned; (ctx = (imap_store_t *)*ctxp); ctxp = &ctx->gen.next)
 		if (((imap_store_conf_t *)ctx->gen.conf)->server == srvc) {
 			*ctxp = ctx->gen.next;
@@ -2359,7 +2352,6 @@ struct driver imap_driver = {
 	imap_cleanup,
 	imap_open_store,
 	imap_disown_store,
-	imap_own_store,
 	imap_cancel_store,
 	imap_list,
 	imap_prepare_opts,

+ 0 - 7
src/drv_maildir.c

@@ -178,12 +178,6 @@ maildir_disown_store( store_t *gctx )
 	free( gctx );
 }
 
-static store_t *
-maildir_own_store( store_conf_t *conf ATTR_UNUSED )
-{
-	return 0;
-}
-
 static void
 maildir_cleanup_drv( void )
 {
@@ -1478,7 +1472,6 @@ struct driver maildir_driver = {
 	maildir_cleanup_drv,
 	maildir_open_store,
 	maildir_disown_store,
-	maildir_own_store,
 	maildir_disown_store, /* _cancel_, but it's the same */
 	maildir_list,
 	maildir_prepare_opts,

+ 0 - 3
src/isync.h

@@ -289,9 +289,6 @@ struct driver {
 	/* Mark the store as available for recycling. Server connection may be kept alive. */
 	void (*disown_store)( store_t *ctx );
 
-	/* Try to recycle a store with the given configuration. */
-	store_t *(*own_store)( store_conf_t *conf );
-
 	/* Discard the store after a bad_callback. The server connections will be closed.
 	 * Pending commands will have their callbacks synchronously invoked with DRV_CANCELED. */
 	void (*cancel_store)( store_t *ctx );

+ 4 - 8
src/main.c

@@ -517,7 +517,6 @@ sync_chans( main_vars_t *mvars, int ent )
 {
 	group_conf_t *group;
 	channel_conf_t *chan;
-	store_t *store;
 	string_list_t *mbox, *sbox, **mboxp, **sboxp;
 	char *channame, *boxp, *nboxp;
 	int t;
@@ -587,15 +586,12 @@ sync_chans( main_vars_t *mvars, int ent )
 		info( "Channel %s\n", mvars->chan->name );
 		mvars->skip = mvars->cben = 0;
 		for (t = 0; t < 2; t++) {
+			info( "Opening %s %s...\n", str_ms[t], mvars->chan->stores[t]->name );
 			mvars->drv[t] = mvars->chan->stores[t]->driver;
-			if ((store = mvars->drv[t]->own_store( mvars->chan->stores[t] )))
-				store_opened( store, AUX );
+			mvars->drv[t]->open_store( mvars->chan->stores[t], store_opened, AUX );
+			if (mvars->skip)
+				break;
 		}
-		for (t = 0; t < 2 && !mvars->skip; t++)
-			if (mvars->state[t] == ST_FRESH) {
-				info( "Opening %s %s...\n", str_ms[t], mvars->chan->stores[t]->name );
-				mvars->drv[t]->open_store( mvars->chan->stores[t], store_opened, AUX );
-			}
 		mvars->cben = 1;
 	  opened:
 		if (mvars->skip)