dovecot-2.0: IMAP FETCH: Binary searching fetch handlers was a b...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Jun 1 21:32:39 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/befc876577e4
changeset: 9427:befc876577e4
user: Timo Sirainen <tss at iki.fi>
date: Mon Jun 01 14:30:05 2009 -0400
description:
IMAP FETCH: Binary searching fetch handlers was a bit broken.
diffstat:
1 file changed, 8 insertions(+), 13 deletions(-)
src/imap/imap-fetch.c | 21 ++++++++-------------
diffs (44 lines):
diff -r 8ecbc7fefeb2 -r befc876577e4 src/imap/imap-fetch.c
--- a/src/imap/imap-fetch.c Mon Jun 01 12:37:58 2009 -0400
+++ b/src/imap/imap-fetch.c Mon Jun 01 14:30:05 2009 -0400
@@ -48,32 +48,27 @@ static int imap_fetch_handler_bsearch(co
{
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;
}
More information about the dovecot-cvs
mailing list