aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-10-18 01:24:49 +0200
committerMax Kellermann <max@duempel.org>2009-10-18 01:24:49 +0200
commitd69e0ab53a4f856f2b20fd58ff7ae141984fecbd (patch)
treec8570861ea98fdf87255f1bda0f565c81c453e44
parente7c267db4fb7d7e48b0dbdcfb39ef21724070033 (diff)
command: omitting the range end is possible
When the range end is missing, then the maximum possible value is assumed.
-rw-r--r--NEWS1
-rw-r--r--doc/protocol.xml14
-rw-r--r--src/command.c5
3 files changed, 19 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 2b19b52b..46a717f5 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ ver 0.16 (20??/??/??)
- "addid" with negative position is deprecated
- "load" supports remote playlists (m3u, pls, xspf, lastfm://)
- allow changing replay gain mode on-the-fly
+ - omitting the range end is possible
* input:
- lastfm: obsolete plugin removed
* tags:
diff --git a/doc/protocol.xml b/doc/protocol.xml
index 3db128b1..eb48185e 100644
--- a/doc/protocol.xml
+++ b/doc/protocol.xml
@@ -67,6 +67,20 @@
successful command executed in the command list.
</para>
</section>
+
+ <section>
+ <title>Ranges</title>
+
+ <para>
+ Some commands (e.g. <link
+ linkend="command_delete"><command>delete</command></link>)
+ allow specifying a range in the form
+ <parameter>START:END</parameter> (the <varname>END</varname>
+ item is not included in the range, similar to ranges in the
+ Python programming language). If <varname>END</varname> is
+ omitted, then the maximum possible value is assumed.
+ </para>
+ </section>
</chapter>
<chapter>
diff --git a/src/command.c b/src/command.c
index 2abdf47f..38673f00 100644
--- a/src/command.c
+++ b/src/command.c
@@ -221,7 +221,7 @@ check_range(struct client *client, unsigned *value_r1, unsigned *value_r2,
if (*test == ':') {
value = strtol(++test, &test2, 10);
- if (*test2 != '\0' || test == test2) {
+ if (*test2 != '\0') {
va_list args;
va_start(args, fmt);
command_error_v(client, ACK_ERROR_ARG, fmt, args);
@@ -229,6 +229,9 @@ check_range(struct client *client, unsigned *value_r1, unsigned *value_r2,
return false;
}
+ if (test == test2)
+ value = G_MAXUINT;
+
if (value < 0) {
command_error(client, ACK_ERROR_ARG,
"Number is negative: %s", s);