dovecot-2.2: imap: Made STATUS handling API more flexible.

dovecot at dovecot.org dovecot at dovecot.org
Mon Aug 13 02:38:58 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/42cc4c4c4891
changeset: 14886:42cc4c4c4891
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Aug 13 01:25:12 2012 +0300
description:
imap: Made STATUS handling API more flexible.

diffstat:

 src/imap/cmd-list.c    |   5 ++---
 src/imap/cmd-status.c  |   7 +++----
 src/imap/imap-status.c |  21 +++++++++++----------
 src/imap/imap-status.h |  15 +++++++++------
 4 files changed, 25 insertions(+), 23 deletions(-)

diffs (129 lines):

diff -r acc60089da4f -r 42cc4c4c4891 src/imap/cmd-list.c
--- a/src/imap/cmd-list.c	Mon Aug 13 00:36:38 2012 +0300
+++ b/src/imap/cmd-list.c	Mon Aug 13 01:25:12 2012 +0300
@@ -376,7 +376,6 @@
 {
 	struct imap_status_result result;
 	struct mail_namespace *ns;
-	const char *error;
 
 	if ((flags & (MAILBOX_NONEXISTENT | MAILBOX_NOSELECT)) != 0) {
 		/* doesn't exist, don't even try to get STATUS */
@@ -392,9 +391,9 @@
 	   namespaces, ctx->ns may not point to correct one */
 	ns = mail_namespace_find(ctx->ns->user->namespaces, name);
 	if (imap_status_get(ctx->cmd, ns, name,
-			    &ctx->status_items, &result, &error) < 0) {
+			    &ctx->status_items, &result) < 0) {
 		client_send_line(ctx->cmd->client,
-				 t_strconcat("* ", error, NULL));
+				 t_strconcat("* ", result.errstr, NULL));
 		return;
 	}
 
diff -r acc60089da4f -r 42cc4c4c4891 src/imap/cmd-status.c
--- a/src/imap/cmd-status.c	Mon Aug 13 00:36:38 2012 +0300
+++ b/src/imap/cmd-status.c	Mon Aug 13 01:25:12 2012 +0300
@@ -13,7 +13,7 @@
 	struct imap_status_items items;
 	struct imap_status_result result;
 	struct mail_namespace *ns;
-	const char *mailbox, *orig_mailbox, *error;
+	const char *mailbox, *orig_mailbox;
 	bool selected_mailbox;
 
 	/* <mailbox> <status items> */
@@ -37,9 +37,8 @@
 
 	selected_mailbox = client->mailbox != NULL &&
 		mailbox_equals(client->mailbox, ns, mailbox);
-	if (imap_status_get(cmd, ns, mailbox, &items,
-			    &result, &error) < 0) {
-		client_send_tagline(cmd, error);
+	if (imap_status_get(cmd, ns, mailbox, &items, &result) < 0) {
+		client_send_tagline(cmd, result.errstr);
 		return TRUE;
 	}
 
diff -r acc60089da4f -r 42cc4c4c4891 src/imap/imap-status.c
--- a/src/imap/imap-status.c	Mon Aug 13 00:36:38 2012 +0300
+++ b/src/imap/imap-status.c	Mon Aug 13 01:25:12 2012 +0300
@@ -58,13 +58,13 @@
 }
 
 int imap_status_get(struct client_command_context *cmd,
-		    struct mail_namespace *ns,
-		    const char *mailbox, const struct imap_status_items *items,
-		    struct imap_status_result *result_r, const char **error_r)
+		    struct mail_namespace *ns, const char *mailbox,
+		    const struct imap_status_items *items,
+		    struct imap_status_result *result_r)
 {
 	struct client *client = cmd->client;
 	struct mailbox *box;
-	enum mail_error error;
+	const char *errstr;
 	int ret = 0;
 
 	if (client->mailbox != NULL &&
@@ -88,17 +88,18 @@
 	}
 
 	if (ret < 0) {
-		*error_r = mailbox_get_last_error(box, &error);
-		*error_r = imap_get_error_string(cmd, *error_r, error);
+		errstr = mailbox_get_last_error(box, &result_r->error);
+		result_r->errstr = imap_get_error_string(cmd, errstr,
+							 result_r->error);
 	}
 	if (box != client->mailbox)
 		mailbox_free(&box);
 	return ret;
 }
 
-void imap_status_send(struct client *client, const char *mailbox_mutf7,
-		      const struct imap_status_items *items,
-		      const struct imap_status_result *result)
+int imap_status_send(struct client *client, const char *mailbox_mutf7,
+		     const struct imap_status_items *items,
+		     const struct imap_status_result *result)
 {
 	const struct mailbox_status *status = &result->status;
 	string_t *str;
@@ -137,5 +138,5 @@
 		str_truncate(str, str_len(str)-1);
 	str_append_c(str, ')');
 
-	client_send_line(client, str_c(str));
+	return client_send_line_next(client, str_c(str));
 }
diff -r acc60089da4f -r 42cc4c4c4891 src/imap/imap-status.h
--- a/src/imap/imap-status.h	Mon Aug 13 00:36:38 2012 +0300
+++ b/src/imap/imap-status.h	Mon Aug 13 01:25:12 2012 +0300
@@ -9,17 +9,20 @@
 struct imap_status_result {
 	struct mailbox_status status;
 	struct mailbox_metadata metadata;
+	enum mail_error error;
+	const char *errstr;
 };
 
 int imap_status_parse_items(struct client_command_context *cmd,
 			    const struct imap_arg *args,
 			    struct imap_status_items *items_r);
 int imap_status_get(struct client_command_context *cmd,
-		    struct mail_namespace *ns,
-		    const char *mailbox, const struct imap_status_items *items,
-		    struct imap_status_result *result_r, const char **error_r);
-void imap_status_send(struct client *client, const char *mailbox_mutf7,
-		      const struct imap_status_items *items,
-		      const struct imap_status_result *result);
+		    struct mail_namespace *ns, const char *mailbox,
+		    const struct imap_status_items *items,
+		    struct imap_status_result *result_r);
+int imap_status_send(struct client *client, const char *mailbox_mutf7,
+		     const struct imap_status_items *items,
+		     const struct imap_status_result *result)
+	ATTR_NOWARN_UNUSED_RESULT;
 
 #endif


More information about the dovecot-cvs mailing list