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

Reply via email to