[dovecot-cvs] dovecot/src/lib-storage mail-storage.c,1.5,1.6 mail-storage.h,1.24,1.25

cras at procontrol.fi cras at procontrol.fi
Thu Jan 2 12:21:43 EET 2003


Update of /home/cvs/dovecot/src/lib-storage
In directory danu:/tmp/cvs-serv21738/lib-storage

Modified Files:
	mail-storage.c mail-storage.h 
Log Message:
Storage can now specify if errors should be sent to user as BAD or NO.
Some changes to messageset parsing as specified by latest IMAP4rev1 draft.
Bad charset error is prefixed with [BADCHARSET]. Fixed a crash in SEARCH the
last commit in it caused.



Index: mail-storage.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-storage.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mail-storage.c	8 Dec 2002 05:23:08 -0000	1.5
+++ mail-storage.c	2 Jan 2003 10:21:41 -0000	1.6
@@ -127,6 +127,8 @@
 {
 	i_free(storage->error);
 	storage->error = NULL;
+
+	storage->syntax_error = FALSE;
 }
 
 void mail_storage_set_error(MailStorage *storage, const char *fmt, ...)
@@ -140,6 +142,23 @@
 	else {
 		va_start(va, fmt);
 		storage->error = i_strdup_vprintf(fmt, va);
+		storage->syntax_error = FALSE;
+		va_end(va);
+	}
+}
+
+void mail_storage_set_syntax_error(MailStorage *storage, const char *fmt, ...)
+{
+	va_list va;
+
+	i_free(storage->error);
+
+	if (fmt == NULL)
+		storage->error = NULL;
+	else {
+		va_start(va, fmt);
+		storage->error = i_strdup_vprintf(fmt, va);
+		storage->syntax_error = TRUE;
 		va_end(va);
 	}
 }
@@ -153,6 +172,7 @@
 
 	storage->error = strftime(str, sizeof(str), CRITICAL_MSG, tm) > 0 ?
 		i_strdup(str) : i_strdup("Internal error");
+	storage->syntax_error = FALSE;
 }
 
 void mail_storage_set_critical(MailStorage *storage, const char *fmt, ...)
@@ -174,8 +194,10 @@
 	}
 }
 
-const char *mail_storage_get_last_error(MailStorage *storage)
+const char *mail_storage_get_last_error(MailStorage *storage, int *syntax)
 {
+	if (syntax != NULL)
+		*syntax = storage->syntax_error;
 	return storage->error;
 }
 

Index: mail-storage.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/mail-storage.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- mail-storage.h	20 Dec 2002 07:53:52 -0000	1.24
+++ mail-storage.h	2 Jan 2003 10:21:41 -0000	1.25
@@ -111,7 +111,7 @@
 				       MailboxNameStatus *status);
 
 	/* Returns the error message of last occured error. */
-	const char *(*get_last_error)(MailStorage *storage);
+	const char *(*get_last_error)(MailStorage *storage, int *syntax_error);
 
 /* private: */
 	char *dir; /* root directory */
@@ -123,6 +123,8 @@
 
 	MailStorageCallbacks *callbacks;
 	void *callback_context;
+
+	unsigned int syntax_error:1; /* Give a BAD reply instead of NO */
 };
 
 struct _Mailbox {
@@ -282,11 +284,13 @@
 void mail_storage_clear_error(MailStorage *storage);
 void mail_storage_set_error(MailStorage *storage, const char *fmt, ...)
 	__attr_format__(2, 3);
+void mail_storage_set_syntax_error(MailStorage *storage, const char *fmt, ...)
+	__attr_format__(2, 3);
 void mail_storage_set_critical(MailStorage *storage, const char *fmt, ...)
 	__attr_format__(2, 3);
 void mail_storage_set_internal_error(MailStorage *storage);
 
-const char *mail_storage_get_last_error(MailStorage *storage);
+const char *mail_storage_get_last_error(MailStorage *storage, int *syntax);
 int mail_storage_is_inconsistency_error(Mailbox *box);
 
 #endif




More information about the dovecot-cvs mailing list