[dovecot-cvs] dovecot/src/lib-storage/index/mbox istream-raw-mbox.c, 1.40.2.2, 1.40.2.3 istream-raw-mbox.h, 1.10, 1.10.2.1 mbox-file.c, 1.17, 1.17.2.1
cras at dovecot.org
cras at dovecot.org
Mon Aug 7 15:42:27 EEST 2006
Update of /var/lib/cvs/dovecot/src/lib-storage/index/mbox
In directory talvi:/tmp/cvs-serv26162/lib-storage/index/mbox
Modified Files:
Tag: branch_1_0
istream-raw-mbox.c istream-raw-mbox.h mbox-file.c
Log Message:
Added MAILBOX_OPEN_MBOX_ONE_MSG_ONLY flag for mailbox_open() which makes it
ignore all but the first From-line in a mbox. This kludge is required for
deliver which builds a temporary mbox stream from the input. Later it
should be fixed to use some plain-mailbox format instead of mbox.
Index: istream-raw-mbox.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/istream-raw-mbox.c,v
retrieving revision 1.40.2.2
retrieving revision 1.40.2.3
diff -u -d -r1.40.2.2 -r1.40.2.3
--- istream-raw-mbox.c 24 Jun 2006 20:53:36 -0000 1.40.2.2
+++ istream-raw-mbox.c 7 Aug 2006 12:42:25 -0000 1.40.2.3
@@ -16,6 +16,7 @@
struct istream *input;
uoff_t input_peak_offset;
+ unsigned int one_mail_only:1;
unsigned int corrupted:1;
unsigned int eof:1;
};
@@ -232,13 +233,15 @@
rest of the line buffered.
FIXME: if From-line is longer than input
buffer, we break. probably irrelevant.. */
- i++;
- from_after_pos = i;
- from_start_pos = i - 6;
- if (from_start_pos > 0 &&
- buf[from_start_pos-1] == '\r') {
- /* CR also belongs to it. */
- from_start_pos--;
+ if (!rstream->one_mail_only) {
+ i++;
+ from_after_pos = i;
+ from_start_pos = i - 6;
+ if (from_start_pos > 0 &&
+ buf[from_start_pos-1] == '\r') {
+ /* CR also belongs to it. */
+ from_start_pos--;
+ }
}
fromp = mbox_from;
} else if (from_start_pos != (size_t)-1) {
@@ -330,7 +333,8 @@
return &stream->statbuf;
}
-struct istream *i_stream_create_raw_mbox(pool_t pool, struct istream *input)
+struct istream *i_stream_create_raw_mbox(pool_t pool, struct istream *input,
+ bool kludge_one_mail_only)
{
struct raw_mbox_istream *rstream;
@@ -338,6 +342,7 @@
rstream = p_new(pool, struct raw_mbox_istream, 1);
+ rstream->one_mail_only = kludge_one_mail_only;
rstream->input = input;
rstream->body_offset = (uoff_t)-1;
rstream->mail_size = (uoff_t)-1;
Index: istream-raw-mbox.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/istream-raw-mbox.h,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -d -r1.10 -r1.10.2.1
--- istream-raw-mbox.h 13 Jan 2006 20:26:37 -0000 1.10
+++ istream-raw-mbox.h 7 Aug 2006 12:42:25 -0000 1.10.2.1
@@ -3,7 +3,8 @@
/* Create a mbox stream for parsing mbox. Reading stops before From-line,
you'll have to call istream_raw_mbox_next() to get to next message. */
-struct istream *i_stream_create_raw_mbox(pool_t pool, struct istream *input);
+struct istream *i_stream_create_raw_mbox(pool_t pool, struct istream *input,
+ bool kludge_one_mail_only);
/* Return offset to beginning of the "\nFrom"-line. */
uoff_t istream_raw_mbox_get_start_offset(struct istream *stream);
Index: mbox-file.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/index/mbox/mbox-file.c,v
retrieving revision 1.17
retrieving revision 1.17.2.1
diff -u -d -r1.17 -r1.17.2.1
--- mbox-file.c 17 Apr 2006 16:23:27 -0000 1.17
+++ mbox-file.c 7 Aug 2006 12:42:25 -0000 1.17.2.1
@@ -60,16 +60,22 @@
int mbox_file_open_stream(struct mbox_mailbox *mbox)
{
+ bool one_mail_only;
+
if (mbox->mbox_stream != NULL)
return 0;
+ one_mail_only =
+ (mbox->ibox.open_flags & MAILBOX_OPEN_MBOX_ONE_MSG_ONLY) != 0;
+
if (mbox->mbox_file_stream != NULL) {
/* read-only mbox stream */
i_assert(mbox->mbox_fd == -1 && mbox->mbox_readonly);
mbox->mbox_stream =
i_stream_create_raw_mbox(default_pool,
- mbox->mbox_file_stream);
+ mbox->mbox_file_stream,
+ one_mail_only);
return 0;
}
@@ -93,7 +99,8 @@
}
mbox->mbox_stream =
- i_stream_create_raw_mbox(default_pool, mbox->mbox_file_stream);
+ i_stream_create_raw_mbox(default_pool, mbox->mbox_file_stream,
+ one_mail_only);
return 0;
}
More information about the dovecot-cvs
mailing list