Mercurial > dovecot > original-hg > dovecot-1.1
changeset 8302:7b70c93061e2 HEAD
IMAP FETCH: Binary searching fetch handlers was a bit broken.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 01 Jun 2009 14:36:28 -0400 |
parents | 8e04d71bd428 |
children | 3d526f8db2a0 |
files | src/imap/imap-fetch.c |
diffstat | 1 files changed, 8 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/imap-fetch.c Mon Jun 01 01:47:05 2009 -0400 +++ b/src/imap/imap-fetch.c Mon Jun 01 14:36:28 2009 -0400 @@ -14,6 +14,7 @@ #include "imap-util.h" #include <stdlib.h> +#include <ctype.h> #define BODY_NIL_REPLY \ "\"text\" \"plain\" NIL NIL NIL \"7bit\" 0 0" @@ -49,32 +50,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; + const char *lookup_name, *p; - handler = bsearch(name, fetch_handlers->data, + for (p = name; i_isalnum(*p); p++) ; + lookup_name = t_strdup_until(name, p); + + handler = bsearch(lookup_name, fetch_handlers->data, fetch_handlers->used / sizeof(struct imap_fetch_handler), 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; }