diff --git a/src/isync.h b/src/isync.h index a39ab21..9b23e50 100644 --- a/src/isync.h +++ b/src/isync.h @@ -451,9 +451,10 @@ extern const char *str_ms[2], *str_hl[2]; #define SYNC_OK 0 /* assumed to be 0 */ #define SYNC_FAIL 1 -#define SYNC_BAD(ms) (2<<(ms)) -#define SYNC_NOGOOD 8 /* internal */ -#define SYNC_CANCELED 16 /* internal */ +#define SYNC_FAIL_ALL 2 +#define SYNC_BAD(ms) (4<<(ms)) +#define SYNC_NOGOOD 16 /* internal */ +#define SYNC_CANCELED 32 /* internal */ /* All passed pointers must stay alive until cb is called. */ void sync_boxes( store_t *ctx[], const char *names[], channel_conf_t *chan, diff --git a/src/main.c b/src/main.c index 71470e6..a636ab1 100644 --- a/src/main.c +++ b/src/main.c @@ -746,11 +746,13 @@ done_sync( int sts, void *aux ) if (sts) { mvars->ret = 1; if (sts & (SYNC_BAD(M) | SYNC_BAD(S))) { - mvars->skip = 1; if (sts & SYNC_BAD(M)) mvars->state[M] = ST_CLOSED; if (sts & SYNC_BAD(S)) mvars->state[S] = ST_CLOSED; + mvars->skip = 1; + } else if (sts & SYNC_FAIL_ALL) { + mvars->skip = 1; } } sync_chans( mvars, E_SYNC ); diff --git a/src/sync.c b/src/sync.c index 8f4d210..1503cff 100644 --- a/src/sync.c +++ b/src/sync.c @@ -647,7 +647,7 @@ box_selected( int sts, void *aux ) if (!ctx[S]->path) { error( "Error: store '%s' does not support in-box sync state\n", chan->stores[S]->name ); sbail: - svars->ret = SYNC_BAD(S); + svars->ret = SYNC_FAIL; sync_bail2( svars ); return; }