aboutsummaryrefslogtreecommitdiffstats
path: root/src/protocol
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-08-11 22:57:06 +0200
committerMax Kellermann <max@duempel.org>2015-08-11 22:58:04 +0200
commite118e958f7f9b87054679ebf6102d6923abbba81 (patch)
tree65368eea1cc1e172b223a770f9352f9a88ac3830 /src/protocol
parentee61dfe08742b76b1c637a038dd5b3a6b244ece7 (diff)
downloadmpd-e118e958f7f9b87054679ebf6102d6923abbba81.tar.gz
mpd-e118e958f7f9b87054679ebf6102d6923abbba81.tar.xz
mpd-e118e958f7f9b87054679ebf6102d6923abbba81.zip
protocol/ArgParser: add overload with max_value parameter
Diffstat (limited to 'src/protocol')
-rw-r--r--src/protocol/ArgParser.cxx26
-rw-r--r--src/protocol/ArgParser.hxx8
2 files changed, 29 insertions, 5 deletions
diff --git a/src/protocol/ArgParser.cxx b/src/protocol/ArgParser.cxx
index 1dbbd0cf3..580d70a20 100644
--- a/src/protocol/ArgParser.cxx
+++ b/src/protocol/ArgParser.cxx
@@ -39,7 +39,8 @@ check_uint32(Client &client, uint32_t *dst, const char *s)
}
bool
-ParseCommandArg(Client &client, int &value_r, const char *s)
+ParseCommandArg(Client &client, int &value_r, const char *s,
+ int min_value, int max_value)
{
char *test;
long value;
@@ -51,8 +52,7 @@ ParseCommandArg(Client &client, int &value_r, const char *s)
return false;
}
- if (value < std::numeric_limits<int>::min() ||
- value > std::numeric_limits<int>::max()) {
+ if (value < min_value || value > max_value) {
command_error(client, ACK_ERROR_ARG,
"Number too large: %s", s);
return false;
@@ -63,6 +63,14 @@ ParseCommandArg(Client &client, int &value_r, const char *s)
}
bool
+ParseCommandArg(Client &client, int &value_r, const char *s)
+{
+ return ParseCommandArg(client, value_r, s,
+ std::numeric_limits<int>::min(),
+ std::numeric_limits<int>::max());
+}
+
+bool
ParseCommandArg(Client &client, RangeArg &value_r, const char *s)
{
char *test, *test2;
@@ -129,7 +137,8 @@ ParseCommandArg(Client &client, RangeArg &value_r, const char *s)
}
bool
-ParseCommandArg(Client &client, unsigned &value_r, const char *s)
+ParseCommandArg(Client &client, unsigned &value_r, const char *s,
+ unsigned max_value)
{
unsigned long value;
char *endptr;
@@ -141,7 +150,7 @@ ParseCommandArg(Client &client, unsigned &value_r, const char *s)
return false;
}
- if (value > std::numeric_limits<unsigned>::max()) {
+ if (value > max_value) {
command_error(client, ACK_ERROR_ARG,
"Number too large: %s", s);
return false;
@@ -152,6 +161,13 @@ ParseCommandArg(Client &client, unsigned &value_r, const char *s)
}
bool
+ParseCommandArg(Client &client, unsigned &value_r, const char *s)
+{
+ return ParseCommandArg(client, value_r, s,
+ std::numeric_limits<unsigned>::max());
+}
+
+bool
ParseCommandArg(Client &client, bool &value_r, const char *s)
{
long value;
diff --git a/src/protocol/ArgParser.hxx b/src/protocol/ArgParser.hxx
index 221ffebe3..87f15846a 100644
--- a/src/protocol/ArgParser.hxx
+++ b/src/protocol/ArgParser.hxx
@@ -34,6 +34,10 @@ bool
check_uint32(Client &client, uint32_t *dst, const char *s);
bool
+ParseCommandArg(Client &client, int &value_r, const char *s,
+ int min_value, int max_value);
+
+bool
ParseCommandArg(Client &client, int &value_r, const char *s);
struct RangeArg {
@@ -49,6 +53,10 @@ bool
ParseCommandArg(Client &client, RangeArg &value_r, const char *s);
bool
+ParseCommandArg(Client &client, unsigned &value_r, const char *s,
+ unsigned max_value);
+
+bool
ParseCommandArg(Client &client, unsigned &value_r, const char *s);
bool