Mercurial > dovecot > core-2.2
changeset 8915:9a97b4f8f6d8 HEAD
dbox: Some more code cleanups.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 17 Feb 2009 16:40:45 -0500 |
parents | e7b7bcbf96b0 |
children | 3ceb0878ab09 |
files | src/lib-storage/index/dbox/dbox-file-maildir.c src/lib-storage/index/dbox/dbox-file-maildir.h src/lib-storage/index/dbox/dbox-file.c src/lib-storage/index/dbox/dbox-file.h |
diffstat | 4 files changed, 29 insertions(+), 69 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/dbox/dbox-file-maildir.c Tue Feb 17 16:24:39 2009 -0500 +++ b/src/lib-storage/index/dbox/dbox-file-maildir.c Tue Feb 17 16:40:45 2009 -0500 @@ -1,8 +1,6 @@ /* Copyright (c) 2007-2009 Dovecot authors, see the included COPYING file */ #include "lib.h" -#include "array.h" -#include "str.h" #include "maildir/maildir-storage.h" #include "maildir/maildir-uidlist.h" #include "maildir/maildir-filename.h" @@ -73,9 +71,18 @@ case DBOX_METADATA_OLDV1_EXPUNGED: case DBOX_METADATA_OLDV1_FLAGS: case DBOX_METADATA_OLDV1_KEYWORDS: + case DBOX_METADATA_OLDV1_SPACE: case DBOX_METADATA_EXT_REF: - case DBOX_METADATA_SPACE: break; } return value; } + +bool dbox_maildir_uid_get_fname(struct dbox_mailbox *mbox, uint32_t uid, + const char **fname_r) +{ + enum maildir_uidlist_rec_flag flags; + + *fname_r = maildir_uidlist_lookup(mbox->maildir_uidlist, uid, &flags); + return *fname_r != NULL; +}
--- a/src/lib-storage/index/dbox/dbox-file-maildir.h Tue Feb 17 16:24:39 2009 -0500 +++ b/src/lib-storage/index/dbox/dbox-file-maildir.h Tue Feb 17 16:40:45 2009 -0500 @@ -3,5 +3,7 @@ const char *dbox_file_maildir_metadata_get(struct dbox_file *file, enum dbox_metadata_key key); +bool dbox_maildir_uid_get_fname(struct dbox_mailbox *mbox, uint32_t uid, + const char **fname_r); #endif
--- a/src/lib-storage/index/dbox/dbox-file.c Tue Feb 17 16:24:39 2009 -0500 +++ b/src/lib-storage/index/dbox/dbox-file.c Tue Feb 17 16:40:45 2009 -0500 @@ -10,7 +10,6 @@ #include "mkdir-parents.h" #include "fdatasync-path.h" #include "str.h" -#include "maildir/maildir-uidlist.h" #include "dbox-storage.h" #include "dbox-file.h" #include "dbox-file-maildir.h" @@ -20,18 +19,6 @@ #include <unistd.h> #include <fcntl.h> -enum mail_flags dbox_mail_flags_map[DBOX_METADATA_FLAGS_COUNT] = { - MAIL_ANSWERED, - MAIL_FLAGGED, - MAIL_DELETED, - MAIL_SEEN, - MAIL_DRAFT -}; - -char dbox_mail_flag_chars[DBOX_METADATA_FLAGS_COUNT] = { - 'A', 'F', 'D', 'S', 'T' -}; - static int dbox_file_metadata_skip_header(struct dbox_file *file); static char *dbox_generate_tmp_filename(void) @@ -125,16 +112,6 @@ } } -static bool -dbox_maildir_uid_get_fname(struct dbox_mailbox *mbox, uint32_t uid, - const char **fname_r) -{ - enum maildir_uidlist_rec_flag flags; - - *fname_r = maildir_uidlist_lookup(mbox->maildir_uidlist, uid, &flags); - return *fname_r != NULL; -} - static char * dbox_file_uid_get_fname(struct dbox_mailbox *mbox, uint32_t uid, bool *maildir_file_r) @@ -561,31 +538,22 @@ } static int -dbox_file_get_maildir_data(struct dbox_file *file, uoff_t *physical_size_r) -{ - struct stat st; - - i_assert(file->uid != 0); - - if (fstat(file->fd, &st) < 0) { - dbox_file_set_syscall_error(file, "fstat"); - return -1; - } - - *physical_size_r = st.st_size; - return 1; -} - -static int dbox_file_read_mail_header(struct dbox_file *file, uoff_t *physical_size_r) { struct dbox_message_header hdr; + struct stat st; const unsigned char *data; size_t size; int ret; - if (file->maildir_file) - return dbox_file_get_maildir_data(file, physical_size_r); + if (file->maildir_file) { + if (fstat(file->fd, &st) < 0) { + dbox_file_set_syscall_error(file, "fstat"); + return -1; + } + *physical_size_r = st.st_size; + return 1; + } ret = i_stream_read_data(file->input, &data, &size, file->msg_header_size - 1); @@ -656,7 +624,7 @@ /* skip over the actual metadata */ while ((line = i_stream_read_next_line(file->input)) != NULL) { - if (*line == DBOX_METADATA_SPACE) { + if (*line == DBOX_METADATA_OLDV1_SPACE) { /* end of metadata */ break; } @@ -884,7 +852,7 @@ if ((line = i_stream_read_next_line(file->input)) == NULL) break; - if (*line == DBOX_METADATA_SPACE || *line == '\0') { + if (*line == DBOX_METADATA_OLDV1_SPACE || *line == '\0') { /* end of metadata */ *expunged_r = FALSE; break;
--- a/src/lib-storage/index/dbox/dbox-file.h Tue Feb 17 16:24:39 2009 -0500 +++ b/src/lib-storage/index/dbox/dbox-file.h Tue Feb 17 16:40:45 2009 -0500 @@ -9,8 +9,7 @@ <metadata> Metadata block begins with DBOX_MAGIC_POST, followed by zero or more lines - in format <key character><value><LF>. The block ends with a line containing - zero or more spaces. The spaces can be used for writing more headers. + in format <key character><value><LF>. The block ends with an empty line. Unknown metadata should be ignored, but preserved when copying. There should be no duplicates for the current metadata, but future @@ -32,22 +31,7 @@ DBOX_HEADER_CREATE_STAMP = 'C' }; -enum dbox_metadata_flags { - DBOX_METADATA_FLAGS_ANSWERED = 0, - DBOX_METADATA_FLAGS_FLAGGED, - DBOX_METADATA_FLAGS_DELETED, - DBOX_METADATA_FLAGS_SEEN, - DBOX_METADATA_FLAGS_DRAFT, - - DBOX_METADATA_FLAGS_COUNT -}; - enum dbox_metadata_key { - /* metadata used by old Dovecot versions */ - DBOX_METADATA_OLDV1_EXPUNGED = 'E', - DBOX_METADATA_OLDV1_FLAGS = 'F', - DBOX_METADATA_OLDV1_KEYWORDS = 'K', - /* Globally unique identifier for the message. Preserved when copying. */ DBOX_METADATA_GUID = 'G', @@ -63,9 +47,11 @@ 1*(<start offset> <byte count> <ref>) */ DBOX_METADATA_EXT_REF = 'X', - /* End of metadata block. The spaces can be used for writing more - metadata. */ - DBOX_METADATA_SPACE = ' ' + /* metadata used by old Dovecot versions */ + DBOX_METADATA_OLDV1_EXPUNGED = 'E', + DBOX_METADATA_OLDV1_FLAGS = 'F', + DBOX_METADATA_OLDV1_KEYWORDS = 'K', + DBOX_METADATA_OLDV1_SPACE = ' ' }; enum dbox_message_type { @@ -131,9 +117,6 @@ unsigned int deleted:1; }; -extern enum mail_flags dbox_mail_flags_map[DBOX_METADATA_FLAGS_COUNT]; -extern char dbox_mail_flag_chars[DBOX_METADATA_FLAGS_COUNT]; - struct dbox_file * dbox_file_init_single(struct dbox_mailbox *mbox, uint32_t uid); struct dbox_file *