diff options
author | Max Kellermann <max@duempel.org> | 2014-04-24 11:38:27 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-04-24 11:38:48 +0200 |
commit | 7fdd8014798a11e93af59f757832a412e9aae45c (patch) | |
tree | a30fd0888157329eae2bbd4e32b2f96bf9b04814 | |
parent | 27002ad1eaee1fcbf57f5ae5bb8a5b0692d85681 (diff) | |
download | mpd-7fdd8014798a11e93af59f757832a412e9aae45c.tar.gz mpd-7fdd8014798a11e93af59f757832a412e9aae45c.tar.xz mpd-7fdd8014798a11e93af59f757832a412e9aae45c.zip |
DatabaseCommands: simplify the handle_list() argument parser
-rw-r--r-- | src/command/DatabaseCommands.cxx | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/command/DatabaseCommands.cxx b/src/command/DatabaseCommands.cxx index 6b541db14..71ae3ec8a 100644 --- a/src/command/DatabaseCommands.cxx +++ b/src/command/DatabaseCommands.cxx @@ -179,16 +179,20 @@ handle_listall(Client &client, gcc_unused int argc, char *argv[]) CommandResult handle_list(Client &client, int argc, char *argv[]) { - unsigned tagType = locate_parse_type(argv[1]); + ConstBuffer<const char *> args(argv + 1, argc - 1); + const char *tag_name = args.shift(); + unsigned tagType = locate_parse_type(tag_name); if (tagType >= TAG_NUM_OF_ITEM_TYPES && tagType != LOCATE_TAG_FILE_TYPE) { - command_error(client, ACK_ERROR_ARG, "\"%s\" is not known", argv[1]); + command_error(client, ACK_ERROR_ARG, + "Unknown tag type: %s", tag_name); return CommandResult::ERROR; } - SongFilter *filter; - if (argc == 3) { + SongFilter *filter = nullptr; + + if (args.size == 1) { /* for compatibility with < 0.12.0 */ if (tagType != TAG_ALBUM) { command_error(client, ACK_ERROR_ARG, @@ -197,10 +201,10 @@ handle_list(Client &client, int argc, char *argv[]) return CommandResult::ERROR; } - filter = new SongFilter((unsigned)TAG_ARTIST, argv[2]); - } else if (argc > 2) { - ConstBuffer<const char *> args(argv + 2, argc - 2); + filter = new SongFilter((unsigned)TAG_ARTIST, args.shift()); + } + if (!args.IsEmpty()) { filter = new SongFilter(); if (!filter->Parse(args, false)) { delete filter; @@ -208,8 +212,7 @@ handle_list(Client &client, int argc, char *argv[]) "not able to parse args"); return CommandResult::ERROR; } - } else - filter = nullptr; + } Error error; CommandResult ret = |