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