CVS commit by ossi: 

backport: deal with UIDVALIDITY of 0 properly.
CCMAIL: [EMAIL PROTECTED]


  M +6 -3      drv_imap.c   1.10.2.9
  M +6 -5      sync.c   1.43.2.4


--- isync/src/drv_imap.c  #1.10.2.8:1.10.2.9
@@ -818,5 +818,5 @@ parse_response_code( imap_store_t *ctx, 
 {
        imap_t *imap = ctx->imap;
-       char *arg, *p;
+       char *arg, *earg, *p;
 
        if (*s != '[')
@@ -830,5 +830,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))
+               {
                        fprintf( stderr, "IMAP error: malformed UIDVALIDITY 
status\n" );
                        return RESP_BAD;
@@ -848,5 +850,6 @@ parse_response_code( imap_store_t *ctx, 
                fprintf( stderr, "*** 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.43.2.3:1.43.2.4
@@ -475,5 +475,5 @@ sync_boxes( store_t *mctx, const char *m
        nmmsg = nsmsg = 0;
 
-       mctx->uidvalidity = sctx->uidvalidity = 0;
+       mctx->uidvalidity = sctx->uidvalidity = -1;
        mopts = sopts = 0;
        makeopts( chan->sops, chan->slave, &sopts, chan->master, &mopts );
@@ -511,5 +511,6 @@ sync_boxes( store_t *mctx, const char *m
        nfasprintf( &nname, "%s.new", dname );
        nfasprintf( &lname, "%s.lock", dname );
-       muidval = suidval = smaxxuid = mmaxuid = smaxuid = 0;
+       muidval = suidval = -1;
+       smaxxuid = mmaxuid = smaxuid = 0;
        memset( &lck, 0, sizeof(lck) );
 #if SEEK_SET != 0
@@ -706,5 +707,5 @@ sync_boxes( store_t *mctx, const char *m
        dump_box( sctx );
 
-       if (suidval && suidval != sctx->uidvalidity) {
+       if (suidval >= 0 && suidval != sctx->uidvalidity) {
                fprintf( stderr, "Error: UIDVALIDITY of slave changed\n" );
                ret = SYNC_FAIL;
@@ -810,5 +811,5 @@ sync_boxes( store_t *mctx, const char *m
        dump_box( mctx );
 
-       if (muidval && muidval != mctx->uidvalidity) {
+       if (muidval >= 0 && muidval != mctx->uidvalidity) {
                fprintf( stderr, "Error: UIDVALIDITY of master changed\n" );
                ret = SYNC_FAIL;
@@ -816,5 +817,5 @@ sync_boxes( store_t *mctx, const char *m
        }
 
-       if (!muidval || !suidval) {
+       if (muidval < 0 || suidval < 0) {
                muidval = mctx->uidvalidity;
                suidval = sctx->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