cmd-sort.c revision 9995d93294b03312d3fcd99cad602f97af9bff40
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen/* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
f1e9611e93dcb3b745c1904029084fa81644e1b3Timo Sirainenget_sort_program(struct client_command_context *cmd,
a04cd96888653891272a512f7735121193af7b35Timo Sirainen enum mail_sort_type program[MAX_SORT_PROGRAM_SIZE])
a04cd96888653891272a512f7735121193af7b35Timo Sirainen unsigned int i, pos;
63946971b08cfb1eec698c28569e1c4aa237852dTimo Sirainen /* empyty list */
e60a349c641bb2f4723e4a395a25f55531682d2bTimo Sirainen client_send_command_error(cmd, "Empty sort program.");
a04cd96888653891272a512f7735121193af7b35Timo Sirainen for (; args->type == IMAP_ARG_ATOM || args->type == IMAP_ARG_STRING;
828edf966ee46f65ec5d907f310cab270e7e1088Timo Sirainen last_reverse = strcasecmp(arg, "reverse") == 0;
55a7410569737197afb302b07b488973324b0cc5Timo Sirainen for (i = 0; sort_names[i].type != MAIL_SORT_END; i++) {
a04cd96888653891272a512f7735121193af7b35Timo Sirainen /* @UNSAFE: mask check should prevent us from ever
a04cd96888653891272a512f7735121193af7b35Timo Sirainen overflowing */
828edf966ee46f65ec5d907f310cab270e7e1088Timo Sirainen client_send_command_error(cmd, "Sort list ends with REVERSE.");
55a7410569737197afb302b07b488973324b0cc5Timo Sirainen "Invalid sort list argument.");
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainenbool cmd_sort(struct client_command_context *cmd)
d43bed2d458520fd01c28229ce2b178a4593a4a7Timo Sirainen enum mail_sort_type sort_program[MAX_SORT_PROGRAM_SIZE];
9995d93294b03312d3fcd99cad602f97af9bff40Timo Sirainen ctx = p_new(cmd->pool, struct imap_search_context, 1);
9995d93294b03312d3fcd99cad602f97af9bff40Timo Sirainen if ((ret = cmd_search_parse_return_if_found(ctx, &args)) <= 0) {
9995d93294b03312d3fcd99cad602f97af9bff40Timo Sirainen /* error / waiting for unambiguity */
55a7410569737197afb302b07b488973324b0cc5Timo Sirainen /* sort program */
e60a349c641bb2f4723e4a395a25f55531682d2bTimo Sirainen client_send_command_error(cmd, "Invalid sort argument.");
d43bed2d458520fd01c28229ce2b178a4593a4a7Timo Sirainen if (get_sort_program(cmd, IMAP_ARG_LIST_ARGS(args), sort_program) < 0)
55a7410569737197afb302b07b488973324b0cc5Timo Sirainen /* charset */
55a7410569737197afb302b07b488973324b0cc5Timo Sirainen if (args->type != IMAP_ARG_ATOM && args->type != IMAP_ARG_STRING) {
55a7410569737197afb302b07b488973324b0cc5Timo Sirainen "Invalid charset argument.");
c4b376dd6e0c423006d7ac83a39253bcaf8e7c47Timo Sirainen ret = imap_search_args_build(cmd, args, charset, &sargs);