CVS commit by ossi: deal with UIDVALIDITY of 0 properly.
M +6 -3 drv_imap.c 1.38 M +4 -3 sync.c 1.88 --- isync/src/drv_imap.c #1.37:1.38 @@ -883,5 +883,5 @@ static int parse_response_code( imap_store_t *ctx, struct imap_cmd_cb *cb, char *s ) { - char *arg, *p; + char *arg, *earg, *p; if (*s != '[') @@ -895,5 +895,7 @@ parse_response_code( imap_store_t *ctx, arg = next_arg( &s ); if (!strcmp( "UIDVALIDITY", arg )) { - if (!(arg = next_arg( &s )) || !(ctx->gen.uidvalidity = atoi( arg ))) { + if (!(arg = next_arg( &s )) || + (ctx->gen.uidvalidity = strtoll( arg, &earg, 10 ), *earg)) + { error( "IMAP error: malformed UIDVALIDITY status\n" ); return RESP_BAD; @@ -913,5 +915,6 @@ parse_response_code( imap_store_t *ctx, error( "*** IMAP ALERT *** %s\n", p ); } else if (cb && cb->ctx && !strcmp( "APPENDUID", arg )) { - if (!(arg = next_arg( &s )) || !(ctx->gen.uidvalidity = atoi( arg )) || + if (!(arg = next_arg( &s )) || + (ctx->gen.uidvalidity = strtoll( arg, &earg, 10 ), *earg) || !(arg = next_arg( &s )) || !(*(int *)cb->ctx = atoi( arg ))) { --- isync/src/sync.c #1.87:1.88 @@ -471,4 +471,5 @@ sync_boxes( store_t *ctx[], const char * svars->ctx[1] = ctx[1]; svars->chan = chan; + svars->uidval[0] = svars->uidval[1] = -1; svars->srecadd = &svars->srecs; @@ -477,5 +478,5 @@ sync_boxes( store_t *ctx[], const char * (!names[t] || (ctx[t]->conf->map_inbox && !strcmp( ctx[t]->conf->map_inbox, names[t] ))) ? "INBOX" : names[t]; - ctx[t]->uidvalidity = 0; + ctx[t]->uidvalidity = -1; svars->drv[t] = ctx[t]->conf->driver; svars->drv[t]->prepare_paths( ctx[t] ); @@ -863,5 +864,5 @@ box_selected( int sts, void *aux ) if (check_ret( sts, svars, t )) return 1; - if (svars->uidval[t] && svars->uidval[t] != svars->ctx[t]->uidvalidity) { + if (svars->uidval[t] >= 0 && svars->uidval[t] != svars->ctx[t]->uidvalidity) { error( "Error: UIDVALIDITY of %s changed (got %d, expected %d)\n", str_ms[t], svars->ctx[t]->uidvalidity, svars->uidval[t] ); @@ -1057,5 +1058,5 @@ msgs_found_sel( sync_vars_t *svars, int return 0; - if (!svars->uidval[M] || !svars->uidval[S]) { + if (svars->uidval[M] < 0 || svars->uidval[S] < 0) { svars->uidval[M] = svars->ctx[M]->uidvalidity; svars->uidval[S] = svars->ctx[S]->uidvalidity; ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel