# HG changeset patch # User Timo Sirainen # Date 1067442341 -7200 # Node ID f59f0c50f0188bc4ee73a60e464d454947ec90c7 # Parent 34bdf8beb23a2cd5c04dd2fa312474e295f7abff fixes diff -r 34bdf8beb23a -r f59f0c50f018 src/lib-index/mbox/mbox-sync-full.c --- a/src/lib-index/mbox/mbox-sync-full.c Wed Oct 29 17:31:45 2003 +0200 +++ b/src/lib-index/mbox/mbox-sync-full.c Wed Oct 29 17:45:41 2003 +0200 @@ -84,7 +84,7 @@ uoff_t hdr_size, body_size; unsigned char current_digest[16]; unsigned int first_seq, last_seq; - int hdr_size_fixed; + int ret, hdr_size_fixed; *next_rec = NULL; @@ -94,10 +94,10 @@ first_rec = last_rec = NULL; first_seq = last_seq = 0; - hdr_size = 0; body_offset = 0; hdr_size_fixed = FALSE; + ret = 0; hdr_size = 0; body_offset = 0; hdr_size_fixed = FALSE; do { if (!mbox_mail_get_location(index, rec, &offset, &body_size)) - return FALSE; + return -1; i_stream_seek(input, header_offset); @@ -123,7 +123,7 @@ if (!mbox_check_uidvalidity(index, ctx.uid_validity)) { /* uidvalidity changed, abort */ - return FALSE; + return -1; } if (ctx.uid_last >= index->header->next_uid) { @@ -149,7 +149,7 @@ if (!index->update_flags(index, rec, *seq, MODIFY_REPLACE, ctx.flags, TRUE)) - return FALSE; + return -1; } else if (rec->msg_flags == ctx.flags) { /* flags are same, it's not dirty anymore */ index_flags &= ~MAIL_INDEX_FLAG_DIRTY; @@ -163,8 +163,9 @@ if (offset != header_offset) { if (!mail_cache_update_location_offset( index->cache, rec, header_offset)) - return FALSE; + return -1; } + ret = 1; break; } @@ -185,13 +186,13 @@ } else { if (!index->expunge(index, first_rec, last_rec, first_seq, last_seq, TRUE)) - return FALSE; + return -1; *seq = first_seq + 1; *next_rec = index->lookup(index, *seq); } - return TRUE; + return ret; } static int mbox_sync_from_stream(struct mail_index *index, @@ -202,7 +203,7 @@ const unsigned char *data; size_t size; unsigned int seq; - int dirty; + int dirty, ret; if (mail_cache_lock(index->cache, FALSE) <= 0) return FALSE; @@ -250,10 +251,11 @@ if (input->v_offset == input->v_size) break; - if (!match_next_record(index, rec, &seq, input, &rec, &dirty)) + ret = match_next_record(index, rec, &seq, input, &rec, &dirty); + if (ret < 0) return FALSE; - if (rec == NULL) { + if (ret == 0) { /* Get back to line before From */ i_stream_seek(input, from_offset); } diff -r 34bdf8beb23a -r f59f0c50f018 src/lib-index/mbox/mbox-sync.c --- a/src/lib-index/mbox/mbox-sync.c Wed Oct 29 17:31:45 2003 +0200 +++ b/src/lib-index/mbox/mbox-sync.c Wed Oct 29 17:45:41 2003 +0200 @@ -38,7 +38,6 @@ enum mail_lock_type data_lock_type, int *changes) { struct stat st; - uoff_t filesize; int count, fd; if (index->mailbox_readonly && data_lock_type == MAIL_LOCK_EXCLUSIVE) { @@ -72,7 +71,6 @@ else if (errno != EEXIST) return mbox_set_syscall_error(index, "open()"); } - filesize = st.st_size; if (index->mbox_fd != -1 && (index->mbox_ino != st.st_ino || @@ -86,7 +84,8 @@ mbox_file_close_fd(index); } - if (index->sync_stamp != st.st_mtime || index->sync_size != filesize) { + if (index->sync_stamp != st.st_mtime || + index->sync_size != (uoff_t)st.st_size) { mbox_file_close_stream(index); if (changes != NULL) @@ -101,8 +100,11 @@ return FALSE; } + if (fstat(index->mbox_fd, &st) < 0) + return mbox_set_syscall_error(index, "fstat()"); + index->sync_stamp = st.st_mtime; - index->sync_size = filesize; + index->sync_size = st.st_size; } /* we need some index lock to be able to lock mbox */