[dovecot-cvs] dovecot/src/lib-storage mail-save.c, 1.8, 1.9 mail-save.h, 1.2, 1.3 mail-storage-private.h, 1.2, 1.3 mail-storage.c, 1.22, 1.23 mail-storage.h, 1.67, 1.68

cras at procontrol.fi cras at procontrol.fi
Sun Jun 20 06:25:35 EEST 2004


Update of /home/cvs/dovecot/src/lib-storage
In directory talvi:/tmp/cvs-serv336/src/lib-storage

Modified Files:
	mail-save.c mail-save.h mail-storage-private.h mail-storage.c 
	mail-storage.h 
Log Message:
mailbox_save() and mailbox_copy() functions can now return the saved mail so
it can be immediately queried. Implemented UIDPLUS extension using it.
Maildir implementation missing, so it crashes with it for now.. APPEND with
mbox now doesn't require resyncing the mailbox since it updates indexes
directly.



Index: mail-save.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-save.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- mail-save.c	18 Jun 2004 00:32:25 -0000	1.8
+++ mail-save.c	20 Jun 2004 03:25:33 -0000	1.9
@@ -130,7 +130,8 @@
 }
 
 int mail_storage_save(struct mail_storage *storage, const char *path,
-		      struct istream *input, struct ostream *output, int crlf,
+		      struct istream *input, struct ostream *output,
+		      int crlf_hdr, int crlf_body,
 		      header_callback_t *header_callback, void *context)
 {
         write_func_t *write_func;
@@ -139,14 +140,15 @@
 	ssize_t ret;
 	int failed;
 
-	write_func = crlf ? write_with_crlf : write_with_lf;
-
 	if (header_callback != NULL) {
+		write_func = crlf_hdr ? write_with_crlf : write_with_lf;
 		if (save_headers(input, output, header_callback,
 				 context, write_func) < 0)
 			return -1;
 	}
 
+	write_func = crlf_body ? write_with_crlf : write_with_lf;
+
 	failed = FALSE;
 	for (;;) {
 		data = i_stream_get_data(input, &size);
@@ -188,7 +190,8 @@
 	return failed ? -1 : 0;
 }
 
-int mail_storage_copy(struct mailbox_transaction_context *t, struct mail *mail)
+int mail_storage_copy(struct mailbox_transaction_context *t, struct mail *mail,
+		      struct mail **dest_mail_r)
 {
 	struct istream *input;
 
@@ -199,5 +202,5 @@
 	return mailbox_save(t, mail->get_flags(mail),
 			    mail->get_received_date(mail), 0,
 			    mail->get_special(mail, MAIL_FETCH_FROM_ENVELOPE),
-			    input);
+			    input, dest_mail_r);
 }

Index: mail-save.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-save.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mail-save.h	27 Apr 2004 20:25:54 -0000	1.2
+++ mail-save.h	20 Jun 2004 03:25:33 -0000	1.3
@@ -8,9 +8,11 @@
 			      write_func_t *write_func, void *context);
 
 int mail_storage_save(struct mail_storage *storage, const char *path,
-		      struct istream *input, struct ostream *output, int crlf,
+		      struct istream *input, struct ostream *output,
+		      int crlf_hdr, int crlf_body,
 		      header_callback_t *header_callback, void *context);
 
-int mail_storage_copy(struct mailbox_transaction_context *t, struct mail *mail);
+int mail_storage_copy(struct mailbox_transaction_context *t, struct mail *mail,
+		      struct mail **dest_mail_r);
 
 #endif

Index: mail-storage-private.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-storage-private.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mail-storage-private.h	2 May 2004 20:32:16 -0000	1.2
+++ mail-storage-private.h	20 Jun 2004 03:25:33 -0000	1.3
@@ -96,8 +96,10 @@
 	int (*save)(struct mailbox_transaction_context *t,
 		    const struct mail_full_flags *flags,
 		    time_t received_date, int timezone_offset,
-		    const char *from_envelope, struct istream *data);
-	int (*copy)(struct mailbox_transaction_context *t, struct mail *mail);
+		    const char *from_envelope, struct istream *data,
+		    struct mail **dest_mail_r);
+	int (*copy)(struct mailbox_transaction_context *t, struct mail *mail,
+		    struct mail **dest_mail_r);
 
 	int (*is_inconsistent)(struct mailbox *box);
 };

Index: mail-storage.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-storage.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- mail-storage.c	2 May 2004 20:32:16 -0000	1.22
+++ mail-storage.c	20 Jun 2004 03:25:33 -0000	1.23
@@ -436,15 +436,17 @@
 int mailbox_save(struct mailbox_transaction_context *t,
 		 const struct mail_full_flags *flags,
 		 time_t received_date, int timezone_offset,
-		 const char *from_envelope, struct istream *data)
+		 const char *from_envelope, struct istream *data,
+		 struct mail **mail_r)
 {
 	return t->box->save(t, flags, received_date, timezone_offset,
-			    from_envelope, data);
+			    from_envelope, data, mail_r);
 }
 
-int mailbox_copy(struct mailbox_transaction_context *t, struct mail *mail)
+int mailbox_copy(struct mailbox_transaction_context *t, struct mail *mail,
+		 struct mail **dest_mail_r)
 {
-	return t->box->copy(t, mail);
+	return t->box->copy(t, mail, dest_mail_r);
 }
 
 int mailbox_is_inconsistent(struct mailbox *box)

Index: mail-storage.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-storage.h,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- mail-storage.h	25 May 2004 17:50:36 -0000	1.67
+++ mail-storage.h	20 Jun 2004 03:25:33 -0000	1.68
@@ -330,13 +330,21 @@
 
 /* Save a mail into mailbox. timezone_offset specifies the timezone in
    minutes in which received_date was originally given with. To use
-   current time, set received_date to (time_t)-1. */
+   current time, set received_date to (time_t)-1.
+
+   If mail_r is non-NULL, the saved message can be accessed using it.
+   Note that setting it non-NULL may require mailbox syncing, so don't give
+   give it unless you need it. */
 int mailbox_save(struct mailbox_transaction_context *t,
 		 const struct mail_full_flags *flags,
 		 time_t received_date, int timezone_offset,
-		 const char *from_envelope, struct istream *data);
-/* Copy given message. */
-int mailbox_copy(struct mailbox_transaction_context *t, struct mail *mail);
+		 const char *from_envelope, struct istream *data,
+		 struct mail **mail_r);
+/* Copy given message. If dest_mail_r is non-NULL, the copied message can be
+   accessed using it. Note that setting it non-NULL may require mailbox
+   syncing, so don't give give it unless you need it. */
+int mailbox_copy(struct mailbox_transaction_context *t, struct mail *mail,
+		 struct mail **dest_mail_r);
 
 /* Returns TRUE if mailbox is now in inconsistent state, meaning that
    the message IDs etc. may have changed - only way to recover this



More information about the dovecot-cvs mailing list