changeset 21630:e630e1ba2e17

lib-imap: imap-evenvelope: Changed imap_envelope_get_field() into a private equivalent.
author Stephan Bosch <stephan.bosch@dovecot.fi>
date Sun, 23 Oct 2016 18:10:01 +0200
parents 4a61612dab4f
children 65907879d3d5
files src/lib-imap/imap-envelope.c src/lib-imap/imap-envelope.h
diffstat 2 files changed, 45 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-imap/imap-envelope.c	Sun Oct 23 17:51:59 2016 +0200
+++ b/src/lib-imap/imap-envelope.c	Sun Oct 23 18:10:01 2016 +0200
@@ -17,67 +17,81 @@
 	const char *in_reply_to, *message_id;
 };
 
+enum envelope_field {
+	ENVELOPE_FIELD_DATE = 0,
+	ENVELOPE_FIELD_SUBJECT,
+	ENVELOPE_FIELD_FROM,
+	ENVELOPE_FIELD_SENDER,
+	ENVELOPE_FIELD_REPLY_TO,
+	ENVELOPE_FIELD_TO,
+	ENVELOPE_FIELD_CC,
+	ENVELOPE_FIELD_BCC,
+	ENVELOPE_FIELD_IN_REPLY_TO,
+	ENVELOPE_FIELD_MESSAGE_ID,
+
+	ENVELOPE_FIELD_UNKNOWN
+};
+
 const char *imap_envelope_headers[] = {
 	"Date", "Subject", "From", "Sender", "Reply-To",
 	"To", "Cc", "Bcc", "In-Reply-To", "Message-ID",
 	NULL
 };
 
-bool imap_envelope_get_field(const char *name, enum imap_envelope_field *ret)
+static enum envelope_field
+envelope_get_field(const char *name)
 {
-	*ret = (enum imap_envelope_field)-1;
-
 	switch (*name) {
 	case 'B':
 	case 'b':
 		if (strcasecmp(name, "Bcc") == 0)
-			*ret = IMAP_ENVELOPE_BCC;
+			return ENVELOPE_FIELD_BCC;
 		break;
 	case 'C':
 	case 'c':
 		if (strcasecmp(name, "Cc") == 0)
-			*ret = IMAP_ENVELOPE_CC;
+			return ENVELOPE_FIELD_CC;
 		break;
 	case 'D':
 	case 'd':
 		if (strcasecmp(name, "Date") == 0)
-			*ret = IMAP_ENVELOPE_DATE;
+			return ENVELOPE_FIELD_DATE;
 		break;
 	case 'F':
 	case 'f':
 		if (strcasecmp(name, "From") == 0)
-			*ret = IMAP_ENVELOPE_FROM;
+			return ENVELOPE_FIELD_FROM;
 		break;
 	case 'I':
 	case 'i':
 		if (strcasecmp(name, "In-reply-to") == 0)
-			*ret = IMAP_ENVELOPE_IN_REPLY_TO;
+			return ENVELOPE_FIELD_IN_REPLY_TO;
 		break;
 	case 'M':
 	case 'm':
 		if (strcasecmp(name, "Message-id") == 0)
-			*ret = IMAP_ENVELOPE_MESSAGE_ID;
+			return ENVELOPE_FIELD_MESSAGE_ID;
 		break;
 	case 'R':
 	case 'r':
 		if (strcasecmp(name, "Reply-to") == 0)
-			*ret = IMAP_ENVELOPE_REPLY_TO;
+			return ENVELOPE_FIELD_REPLY_TO;
 		break;
 	case 'S':
 	case 's':
 		if (strcasecmp(name, "Subject") == 0)
-			*ret = IMAP_ENVELOPE_SUBJECT;
+			return ENVELOPE_FIELD_SUBJECT;
 		if (strcasecmp(name, "Sender") == 0)
-			*ret = IMAP_ENVELOPE_SENDER;
+			return ENVELOPE_FIELD_SENDER;
 		break;
 	case 'T':
 	case 't':
 		if (strcasecmp(name, "To") == 0)
-			*ret = IMAP_ENVELOPE_TO;
+			return ENVELOPE_FIELD_TO;
 		break;
 	}
 
-	return *ret != (enum imap_envelope_field)-1;
+	return ENVELOPE_FIELD_UNKNOWN;
 }
 
 void imap_envelope_parse_header(pool_t pool,
@@ -85,7 +99,7 @@
 				struct message_header_line *hdr)
 {
 	struct message_part_envelope_data *d;
-	enum imap_envelope_field field;
+	enum envelope_field field;
 	struct message_address **addr_p;
 	const char **str_p;
 
@@ -93,7 +107,10 @@
 		*data = p_new(pool, struct message_part_envelope_data, 1);
 	}
 
-	if (hdr == NULL || !imap_envelope_get_field(hdr->name, &field))
+	if (hdr == NULL)
+		return;
+	field = envelope_get_field(hdr->name);
+	if (field == ENVELOPE_FIELD_UNKNOWN)
 		return;
 
 	if (hdr->continues) {
@@ -105,39 +122,39 @@
 	d = *data;
 	addr_p = NULL; str_p = NULL;
 	switch (field) {
-	case IMAP_ENVELOPE_DATE:
+	case ENVELOPE_FIELD_DATE:
 		str_p = &d->date;
 		break;
-	case IMAP_ENVELOPE_SUBJECT:
+	case ENVELOPE_FIELD_SUBJECT:
 		str_p = &d->subject;
 		break;
-	case IMAP_ENVELOPE_MESSAGE_ID:
+	case ENVELOPE_FIELD_MESSAGE_ID:
 		str_p = &d->message_id;
 		break;
-	case IMAP_ENVELOPE_IN_REPLY_TO:
+	case ENVELOPE_FIELD_IN_REPLY_TO:
 		str_p = &d->in_reply_to;
 		break;
 
-	case IMAP_ENVELOPE_CC:
+	case ENVELOPE_FIELD_CC:
 		addr_p = &d->cc;
 		break;
-	case IMAP_ENVELOPE_BCC:
+	case ENVELOPE_FIELD_BCC:
 		addr_p = &d->bcc;
 		break;
-	case IMAP_ENVELOPE_FROM:
+	case ENVELOPE_FIELD_FROM:
 		addr_p = &d->from;
 		break;
-	case IMAP_ENVELOPE_SENDER:
+	case ENVELOPE_FIELD_SENDER:
 		addr_p = &d->sender;
 		break;
-	case IMAP_ENVELOPE_TO:
+	case ENVELOPE_FIELD_TO:
 		addr_p = &d->to;
 		break;
-	case IMAP_ENVELOPE_REPLY_TO:
+	case ENVELOPE_FIELD_REPLY_TO:
 		addr_p = &d->reply_to;
 		break;
-	case IMAP_ENVELOPE_FIELDS:
-		break;
+	case ENVELOPE_FIELD_UNKNOWN:
+		i_unreached();
 	}
 
 	if (addr_p != NULL) {
--- a/src/lib-imap/imap-envelope.h	Sun Oct 23 17:51:59 2016 +0200
+++ b/src/lib-imap/imap-envelope.h	Sun Oct 23 18:10:01 2016 +0200
@@ -3,29 +3,10 @@
 
 struct imap_arg;
 struct message_header_line;
-
-enum imap_envelope_field {
-	/* NOTE: in the same order as listed in ENVELOPE */
-	IMAP_ENVELOPE_DATE = 0,
-	IMAP_ENVELOPE_SUBJECT,
-	IMAP_ENVELOPE_FROM,
-	IMAP_ENVELOPE_SENDER,
-	IMAP_ENVELOPE_REPLY_TO,
-	IMAP_ENVELOPE_TO,
-	IMAP_ENVELOPE_CC,
-	IMAP_ENVELOPE_BCC,
-	IMAP_ENVELOPE_IN_REPLY_TO,
-	IMAP_ENVELOPE_MESSAGE_ID,
-
-	IMAP_ENVELOPE_FIELDS
-};
-
 struct message_part_envelope_data;
 
 extern const char *imap_envelope_headers[];
 
-bool imap_envelope_get_field(const char *name, enum imap_envelope_field *ret);
-
 /* Update envelope data based from given header field */
 void imap_envelope_parse_header(pool_t pool,
 				struct message_part_envelope_data **data,