changeset 9115:4d2b2adfd415 HEAD

IMAP FETCH: Binary searching fetch handlers was a bit broken.
author Timo Sirainen <tss@iki.fi>
date Mon, 01 Jun 2009 14:30:05 -0400
parents 1a7c6732730e
children 9ae55b68cf61
files src/imap/imap-fetch.c
diffstat 1 files changed, 7 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/imap-fetch.c	Mon Jun 01 12:30:54 2009 -0400
+++ b/src/imap/imap-fetch.c	Mon Jun 01 14:30:05 2009 -0400
@@ -48,32 +48,27 @@
 {
 	const char *name = name_p;
         const struct imap_fetch_handler *h = handler_p;
-	int i;
 
-	for (i = 0; h->name[i] != '\0'; i++) {
-		if (h->name[i] != name[i]) {
-			if (name[i] < 'A' || name[i] >= 'Z')
-				return -1;
-			return name[i] - h->name[i];
-		}
-	}
-
-	return name[i] < 'A' || name[i] >= 'Z' ? 0 : -1;
+	return strcmp(name, h->name);
 }
 
 bool imap_fetch_init_handler(struct imap_fetch_context *ctx, const char *name,
 			     const struct imap_arg **args)
 {
 	const struct imap_fetch_handler *handler, *handlers;
+	const char *lookup_name, *p;
 	unsigned int count;
 
+	for (p = name; *p >= 'A' && *p <= 'Z'; p++) ;
+	lookup_name = t_strdup_until(name, p);
+
 	handlers = array_get_modifiable(&fetch_handlers, &count);
-	handler = bsearch(name, handlers, count,
+	handler = bsearch(lookup_name, handlers, count,
 			  sizeof(struct imap_fetch_handler),
 			  imap_fetch_handler_bsearch);
 	if (handler == NULL) {
 		client_send_command_error(ctx->cmd,
-			t_strconcat("Unknown command ", name, NULL));
+			t_strconcat("Unknown parameter ", name, NULL));
 		return FALSE;
 	}