bool cmd_sort(struct client_command_context *cmd) { struct imap_search_context *ctx; struct mail_search_args *sargs; enum mail_sort_type sort_program[MAX_SORT_PROGRAM_SIZE]; const struct imap_arg *args, *list_args; const char *charset; int ret; if (!client_read_args(cmd, 0, 0, &args)) return FALSE; if (!client_verify_open_mailbox(cmd)) return TRUE; ctx = p_new(cmd->pool, struct imap_search_context, 1); ctx->cmd = cmd; if ((ret = cmd_search_parse_return_if_found(ctx, &args)) <= 0) { /* error / waiting for unambiguity */ return ret < 0; } /* sort program */ if (!imap_arg_get_list(args, &list_args)) { client_send_command_error(cmd, "Invalid sort argument."); return TRUE; } if (get_sort_program(cmd, list_args, sort_program) < 0) return TRUE; args++; /* charset */ if (!imap_arg_get_astring(args, &charset)) { client_send_command_error(cmd, "Invalid charset argument."); return TRUE; } args++; ret = imap_search_args_build(cmd, args, charset, &sargs); if (ret <= 0) return ret < 0; return imap_search_start(ctx, sargs, sort_program); }
bool cmd_search(struct client_command_context *cmd) { struct imap_search_context *ctx; struct mail_search_args *sargs; const struct imap_arg *args; const char *charset; int ret; if (!client_read_args(cmd, 0, 0, &args)) return FALSE; if (!client_verify_open_mailbox(cmd)) return TRUE; ctx = p_new(cmd->pool, struct imap_search_context, 1); ctx->cmd = cmd; if ((ret = cmd_search_parse_return_if_found(ctx, &args)) <= 0) { /* error / waiting for unambiguity */ return ret < 0; } if (imap_arg_atom_equals(args, "CHARSET")) { /* CHARSET specified */ if (!imap_arg_get_astring(&args[1], &charset)) { client_send_command_error(cmd, "Invalid charset argument."); imap_search_context_free(ctx); return TRUE; } args += 2; } else { charset = "UTF-8"; } ret = imap_search_args_build(cmd, args, charset, &sargs); if (ret <= 0) { imap_search_context_free(ctx); return ret < 0; } return imap_search_start(ctx, sargs, NULL); }