changeset 4635:210bb1ff0e6e HEAD

Added fill_missing parameter to message_address_parse() which specifies if missing mailbox and domain should be returned as MISSING_MAILBOX and MISSING_DOMAIN or just as empty strings.
author Timo Sirainen <tss@iki.fi>
date Sun, 08 Oct 2006 22:22:33 +0300
parents 5e94f1332189
children 630e6121fb8d
files src/lib-imap/imap-envelope.c src/lib-mail/message-address.c src/lib-mail/message-address.h src/lib-storage/index/index-search.c src/lib-storage/index/index-sort.c
diffstat 5 files changed, 19 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-imap/imap-envelope.c	Sun Oct 08 20:27:14 2006 +0300
+++ b/src/lib-imap/imap-envelope.c	Sun Oct 08 22:22:33 2006 +0300
@@ -146,7 +146,7 @@
 	if (addr_p != NULL) {
 		*addr_p = message_address_parse(pool, hdr->full_value,
 						hdr->full_value_len,
-						(unsigned int)-1);
+						(unsigned int)-1, TRUE);
 	}
 
 	if (str_p != NULL)
--- a/src/lib-mail/message-address.c	Sun Oct 08 20:27:14 2006 +0300
+++ b/src/lib-mail/message-address.c	Sun Oct 08 22:22:33 2006 +0300
@@ -12,6 +12,8 @@
 
 	struct message_address *first_addr, *last_addr, addr;
 	string_t *str;
+
+	bool fill_missing;
 };
 
 static void add_address(struct message_address_parser_context *ctx)
@@ -189,10 +191,14 @@
 			return -1;
 	}
 
-	if (ctx->addr.mailbox == NULL)
-		ctx->addr.mailbox = p_strdup(ctx->pool, "MISSING_MAILBOX");
-	if (ctx->addr.domain == NULL)
-		ctx->addr.domain = p_strdup(ctx->pool, "MISSING_DOMAIN");
+	if (ctx->addr.mailbox == NULL) {
+		ctx->addr.mailbox = !ctx->fill_missing ? "" :
+			p_strdup(ctx->pool, "MISSING_MAILBOX");
+	}
+	if (ctx->addr.domain == NULL) {
+		ctx->addr.domain = !ctx->fill_missing ? "" :
+			p_strdup(ctx->pool, "MISSING_DOMAIN");
+	}
 	add_address(ctx);
 
 	return ret;
@@ -273,7 +279,7 @@
 
 struct message_address *
 message_address_parse(pool_t pool, const unsigned char *data, size_t size,
-		      unsigned int max_addresses)
+		      unsigned int max_addresses, bool fill_missing)
 {
 	struct message_address_parser_context ctx;
 
@@ -284,6 +290,7 @@
 	rfc822_parser_init(&ctx.parser, data, size, t_str_new(128));
 	ctx.pool = pool;
 	ctx.str = t_str_new(128);
+	ctx.fill_missing = fill_missing;
 
 	rfc822_skip_lwsp(&ctx.parser);
 
--- a/src/lib-mail/message-address.h	Sun Oct 08 20:27:14 2006 +0300
+++ b/src/lib-mail/message-address.h	Sun Oct 08 22:22:33 2006 +0300
@@ -10,10 +10,12 @@
 	const char *name, *route, *mailbox, *domain;
 };
 
-/* Parse message addresses from given data. */
+/* Parse message addresses from given data. If fill_missing is TRUE, missing
+   mailbox and domain are set to MISSING_MAILBOX and MISSING_DOMAIN strings.
+   Otherwise they're set to "". */
 struct message_address *
 message_address_parse(pool_t pool, const unsigned char *data, size_t size,
-		      unsigned int max_addresses);
+		      unsigned int max_addresses, bool fill_missing);
 
 void message_address_write(string_t *str, const struct message_address *addr);
 
--- a/src/lib-storage/index/index-search.c	Sun Oct 08 20:27:14 2006 +0300
+++ b/src/lib-storage/index/index-search.c	Sun Oct 08 22:22:33 2006 +0300
@@ -395,7 +395,7 @@
 			addr = message_address_parse(pool_datastack_create(),
 						     ctx->hdr->full_value,
 						     ctx->hdr->full_value_len,
-						     (unsigned int)-1);
+						     (unsigned int)-1, TRUE);
 			str = t_str_new(ctx->hdr->value_len);
 			message_address_write(str, addr);
 			ret = message_header_search(str_data(str), str_len(str),
--- a/src/lib-storage/index/index-sort.c	Sun Oct 08 20:27:14 2006 +0300
+++ b/src/lib-storage/index/index-sort.c	Sun Oct 08 22:22:33 2006 +0300
@@ -163,7 +163,7 @@
 
 	addr = message_address_parse(pool_datastack_create(),
 				     (const unsigned char *)str,
-				     strlen(str), 1);
+				     strlen(str), 1, TRUE);
 	return addr != NULL ? addr->mailbox : "";
 }