static struct mail_search_register *mail_search_register_init_imap(void) { struct mail_search_register *reg; reg = mail_search_register_init(); mail_search_register_add(reg, imap_register_args, N_ELEMENTS(imap_register_args)); mail_search_register_fallback(reg, imap_search_fallback); return reg; }
static struct mail_search_register * mail_search_register_init_human(struct mail_search_register *imap_register) { struct mail_search_register *reg; mail_search_register_fallback_t *fallback; ARRAY(struct mail_search_register_arg) copy_args; const struct mail_search_register_arg *human_args, *imap_args; unsigned int i, j, human_count, imap_count; int ret; reg = mail_search_register_init(); mail_search_register_add(reg, human_register_args, N_ELEMENTS(human_register_args)); /* find and register args in imap that don't exist in human */ imap_args = mail_search_register_get(imap_register, &imap_count); human_args = mail_search_register_get(reg, &human_count); t_array_init(©_args, imap_count); for (i = j = 0; i < imap_count && j < human_count; ) { ret = strcmp(imap_args[i].key, human_args[j].key); if (ret < 0) { array_append(©_args, &imap_args[i], 1); i++; } else if (ret > 0) { j++; } else { i++; j++; } } for (; i < imap_count; i++) array_append(©_args, &imap_args[i], 1); imap_args = array_get(©_args, &imap_count); mail_search_register_add(reg, imap_args, imap_count); if (mail_search_register_get_fallback(imap_register, &fallback)) mail_search_register_fallback(reg, fallback); return reg; }