# HG changeset patch # User Timo Sirainen # Date 1184197214 -10800 # Node ID 1a80f37a4a1271174b4e05e7cf9a1207fd5534b3 # Parent a0b3228be6d2f8521241859ce8dece00f158714d Added MAIL_FETCH_NUL_STATE. Don't try to fetch cached flags now unless it's needed. diff -r a0b3228be6d2 -r 1a80f37a4a12 src/imap/imap-fetch.c --- a/src/imap/imap-fetch.c Thu Jul 12 02:38:37 2007 +0300 +++ b/src/imap/imap-fetch.c Thu Jul 12 02:40:14 2007 +0300 @@ -175,6 +175,10 @@ mailbox_header_lookup_init(ctx->box, data); } + if ((ctx->fetch_data & + (MAIL_FETCH_STREAM_HEADER | MAIL_FETCH_STREAM_BODY)) != 0) + ctx->fetch_data |= MAIL_FETCH_NUL_STATE; + ctx->trans = mailbox_transaction_begin(ctx->box, MAILBOX_TRANSACTION_FLAG_HIDE); ctx->select_counter = ctx->client->select_counter; diff -r a0b3228be6d2 -r 1a80f37a4a12 src/lib-storage/index/index-mail.c --- a/src/lib-storage/index/index-mail.c Thu Jul 12 02:38:37 2007 +0300 +++ b/src/lib-storage/index/index-mail.c Thu Jul 12 02:40:14 2007 +0300 @@ -916,10 +916,13 @@ data->rec = rec; data->seq = seq; - if (!index_mail_get_fixed_field(mail, MAIL_CACHE_FLAGS, - &data->cache_flags, - sizeof(data->cache_flags))) - data->cache_flags = 0; + if ((mail->wanted_fields & (MAIL_FETCH_NUL_STATE | + MAIL_FETCH_IMAP_BODY | + MAIL_FETCH_IMAP_BODYSTRUCTURE)) != 0) { + (void)index_mail_get_fixed_field(mail, MAIL_CACHE_FLAGS, + &data->cache_flags, + sizeof(data->cache_flags)); + } /* set public fields */ mail->mail.mail.seq = seq; diff -r a0b3228be6d2 -r 1a80f37a4a12 src/lib-storage/mail-storage.h --- a/src/lib-storage/mail-storage.h Thu Jul 12 02:38:37 2007 +0300 +++ b/src/lib-storage/mail-storage.h Thu Jul 12 02:40:14 2007 +0300 @@ -94,6 +94,9 @@ MAIL_FETCH_PHYSICAL_SIZE = 0x00000080, MAIL_FETCH_VIRTUAL_SIZE = 0x00000100, + /* Set has_nuls / has_no_nuls fields */ + MAIL_FETCH_NUL_STATE = 0x00000200, + /* specials: */ MAIL_FETCH_IMAP_BODY = 0x00001000, MAIL_FETCH_IMAP_BODYSTRUCTURE = 0x00002000,