commit f46cf8c887db43ac8dc31b68a4d7405fdf5d56b3
parent d54809e26885838bdf646d33a0f2ff4b22f6bfd2
Author: Oswald Buddenhagen <ossi@users.sf.net>
Date: Sun, 19 Mar 2017 13:50:41 +0100
provide a proper getter callback for driver capabilities
that way driver_t contains only callbacks.
Diffstat:
6 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/src/driver.h b/src/driver.h
@@ -147,7 +147,8 @@ typedef struct {
#define LIST_PATH_MAYBE 4
struct driver {
- int flags;
+ /* Return driver capabilities. */
+ int (*get_caps)( store_t *ctx );
/* Parse configuration. */
int (*parse_store)( conffile_t *cfg, store_conf_t **storep );
diff --git a/src/drv_imap.c b/src/drv_imap.c
@@ -3183,8 +3183,14 @@ imap_parse_store( conffile_t *cfg, store_conf_t **storep )
return 1;
}
+static int
+imap_get_caps( store_t *gctx ATTR_UNUSED )
+{
+ return DRV_CRLF | DRV_VERBOSE;
+}
+
struct driver imap_driver = {
- DRV_CRLF | DRV_VERBOSE,
+ imap_get_caps,
imap_parse_store,
imap_cleanup,
imap_alloc_store,
diff --git a/src/drv_maildir.c b/src/drv_maildir.c
@@ -1865,8 +1865,14 @@ maildir_parse_store( conffile_t *cfg, store_conf_t **storep )
return 1;
}
+static int
+maildir_get_caps( store_t *gctx ATTR_UNUSED )
+{
+ return 0; /* XXX DRV_CRLF? */
+}
+
struct driver maildir_driver = {
- 0, /* XXX DRV_CRLF? */
+ maildir_get_caps,
maildir_parse_store,
maildir_cleanup_drv,
maildir_alloc_store,
diff --git a/src/drv_proxy.c b/src/drv_proxy.c
diff --git a/src/main.c b/src/main.c
@@ -810,7 +810,7 @@ sync_chans( main_vars_t *mvars, int ent )
if (mvars->skip)
goto next2;
mvars->state[M] = mvars->state[S] = ST_FRESH;
- if (mvars->chan->stores[M]->driver->flags & mvars->chan->stores[S]->driver->flags & DRV_VERBOSE)
+ if (mvars->chan->stores[M]->driver->get_caps( 0 ) & mvars->chan->stores[S]->driver->get_caps( 0 ) & DRV_VERBOSE)
labels[M] = "M: ", labels[S] = "S: ";
else
labels[M] = labels[S] = "";
diff --git a/src/sync.c b/src/sync.c
@@ -407,8 +407,8 @@ msg_fetched( int sts, void *aux )
vars->msg->flags = vars->data.flags;
- scr = (svars->drv[1-t]->flags / DRV_CRLF) & 1;
- tcr = (svars->drv[t]->flags / DRV_CRLF) & 1;
+ scr = (svars->drv[1-t]->get_caps( svars->ctx[1-t] ) / DRV_CRLF) & 1;
+ tcr = (svars->drv[t]->get_caps( svars->ctx[t] ) / DRV_CRLF) & 1;
if (vars->srec || scr != tcr) {
if (!copy_msg_convert( scr, tcr, vars )) {
warn( "Warning: message %d from %s has incomplete header.\n",