cmd-sort.c revision 828edf966ee46f65ec5d907f310cab270e7e1088
2e37d45867d081db150ab78dad303b9077aea24fTimo Sirainen/* Copyright (c) 2002-2008 Dovecot authors, see the included COPYING file */
a0c453a8edaec90fb0d945c874de0b1845bc7d7eTimo Sirainenget_sort_program(struct client_command_context *cmd,
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen enum mail_sort_type program[MAX_SORT_PROGRAM_SIZE])
88dc563319efecd6e68bad16b0d92672da05584aTimo Sirainen unsigned int i, pos;
1b0cfbf3cc77a670b92fff5c30f7b1eb17a63ab1Timo Sirainen /* empyty list */
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen client_send_command_error(cmd, "Empty sort program.");
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen for (; args->type == IMAP_ARG_ATOM || args->type == IMAP_ARG_STRING;
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen last_reverse = strcasecmp(arg, "reverse") == 0;
88dc563319efecd6e68bad16b0d92672da05584aTimo Sirainen for (i = 0; sort_names[i].type != MAIL_SORT_END; i++) {
bc93929cdd9000ca560a5f42a27f50ab307f1efbTimo Sirainen /* @UNSAFE: mask check should prevent us from ever
1b0cfbf3cc77a670b92fff5c30f7b1eb17a63ab1Timo Sirainen overflowing */
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen client_send_command_error(cmd, "Sort list ends with REVERSE.");
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen "Invalid sort list argument.");
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainenbool cmd_sort(struct client_command_context *cmd)
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen enum mail_sort_type sorting[MAX_SORT_PROGRAM_SIZE];
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen args_count = imap_parser_read_args(cmd->parser, 0, 0, &args);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen client_send_command_error(cmd, args_count < 0 ? NULL :
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen "Missing or invalid arguments.");
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo Sirainen /* sort program */
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo Sirainen client_send_command_error(cmd, "Invalid sort argument.");
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen if (get_sort_program(cmd, IMAP_ARG_LIST_ARGS(args), sorting) < 0)
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo Sirainen /* charset */
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo Sirainen if (args->type != IMAP_ARG_ATOM && args->type != IMAP_ARG_STRING) {
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen "Invalid charset argument.");
bc93929cdd9000ca560a5f42a27f50ab307f1efbTimo Sirainen ret = imap_search_args_build(cmd, args, charset, &sargs);
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen (cmd->uid ? 0 : MAILBOX_SYNC_FLAG_NO_EXPUNGES),
8d587838c414c48a331f0b54cd7ffd97e5024abdTimo Sirainen 0, "OK Sort completed.");