protocol/ArgParser: add overload with max_value parameter
This commit is contained in:
parent
ee61dfe087
commit
e118e958f7
@ -309,14 +309,9 @@ CommandResult
|
|||||||
handle_setvol(Client &client, Request args)
|
handle_setvol(Client &client, Request args)
|
||||||
{
|
{
|
||||||
unsigned level;
|
unsigned level;
|
||||||
if (!ParseCommandArg(client, level, args.front()))
|
if (!ParseCommandArg(client, level, args.front(), 100))
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
|
|
||||||
if (level > 100) {
|
|
||||||
command_error(client, ACK_ERROR_ARG, "Invalid volume value");
|
|
||||||
return CommandResult::ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!volume_level_change(client.partition.outputs, level)) {
|
if (!volume_level_change(client.partition.outputs, level)) {
|
||||||
command_error(client, ACK_ERROR_SYSTEM,
|
command_error(client, ACK_ERROR_SYSTEM,
|
||||||
"problems setting volume");
|
"problems setting volume");
|
||||||
@ -330,14 +325,9 @@ CommandResult
|
|||||||
handle_volume(Client &client, Request args)
|
handle_volume(Client &client, Request args)
|
||||||
{
|
{
|
||||||
int relative;
|
int relative;
|
||||||
if (!ParseCommandArg(client, relative, args.front()))
|
if (!ParseCommandArg(client, relative, args.front(), -100, 100))
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
|
|
||||||
if (relative < -100 || relative > 100) {
|
|
||||||
command_error(client, ACK_ERROR_ARG, "Invalid volume value");
|
|
||||||
return CommandResult::ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
const int old_volume = volume_level_get(client.partition.outputs);
|
const int old_volume = volume_level_get(client.partition.outputs);
|
||||||
if (old_volume < 0) {
|
if (old_volume < 0) {
|
||||||
command_error(client, ACK_ERROR_SYSTEM, "No mixer");
|
command_error(client, ACK_ERROR_SYSTEM, "No mixer");
|
||||||
|
@ -314,15 +314,9 @@ handle_prio(Client &client, Request args)
|
|||||||
{
|
{
|
||||||
const char *const priority_string = args.shift();
|
const char *const priority_string = args.shift();
|
||||||
unsigned priority;
|
unsigned priority;
|
||||||
if (!ParseCommandArg(client, priority, priority_string))
|
if (!ParseCommandArg(client, priority, priority_string, 0xff))
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
|
|
||||||
if (priority > 0xff) {
|
|
||||||
command_error(client, ACK_ERROR_ARG,
|
|
||||||
"Priority out of range: %s", priority_string);
|
|
||||||
return CommandResult::ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const char *i : args) {
|
for (const char *i : args) {
|
||||||
RangeArg range;
|
RangeArg range;
|
||||||
if (!ParseCommandArg(client, range, i))
|
if (!ParseCommandArg(client, range, i))
|
||||||
@ -344,15 +338,9 @@ handle_prioid(Client &client, Request args)
|
|||||||
{
|
{
|
||||||
const char *const priority_string = args.shift();
|
const char *const priority_string = args.shift();
|
||||||
unsigned priority;
|
unsigned priority;
|
||||||
if (!ParseCommandArg(client, priority, priority_string))
|
if (!ParseCommandArg(client, priority, priority_string, 0xff))
|
||||||
return CommandResult::ERROR;
|
return CommandResult::ERROR;
|
||||||
|
|
||||||
if (priority > 0xff) {
|
|
||||||
command_error(client, ACK_ERROR_ARG,
|
|
||||||
"Priority out of range: %s", priority_string);
|
|
||||||
return CommandResult::ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const char *i : args) {
|
for (const char *i : args) {
|
||||||
unsigned song_id;
|
unsigned song_id;
|
||||||
if (!ParseCommandArg(client, song_id, i))
|
if (!ParseCommandArg(client, song_id, i))
|
||||||
|
@ -39,7 +39,8 @@ check_uint32(Client &client, uint32_t *dst, const char *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
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;
|
char *test;
|
||||||
long value;
|
long value;
|
||||||
@ -51,8 +52,7 @@ ParseCommandArg(Client &client, int &value_r, const char *s)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value < std::numeric_limits<int>::min() ||
|
if (value < min_value || value > max_value) {
|
||||||
value > std::numeric_limits<int>::max()) {
|
|
||||||
command_error(client, ACK_ERROR_ARG,
|
command_error(client, ACK_ERROR_ARG,
|
||||||
"Number too large: %s", s);
|
"Number too large: %s", s);
|
||||||
return false;
|
return false;
|
||||||
@ -62,6 +62,14 @@ ParseCommandArg(Client &client, int &value_r, const char *s)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
bool
|
||||||
ParseCommandArg(Client &client, RangeArg &value_r, const char *s)
|
ParseCommandArg(Client &client, RangeArg &value_r, const char *s)
|
||||||
{
|
{
|
||||||
@ -129,7 +137,8 @@ ParseCommandArg(Client &client, RangeArg &value_r, const char *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
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;
|
unsigned long value;
|
||||||
char *endptr;
|
char *endptr;
|
||||||
@ -141,7 +150,7 @@ ParseCommandArg(Client &client, unsigned &value_r, const char *s)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value > std::numeric_limits<unsigned>::max()) {
|
if (value > max_value) {
|
||||||
command_error(client, ACK_ERROR_ARG,
|
command_error(client, ACK_ERROR_ARG,
|
||||||
"Number too large: %s", s);
|
"Number too large: %s", s);
|
||||||
return false;
|
return false;
|
||||||
@ -151,6 +160,13 @@ ParseCommandArg(Client &client, unsigned &value_r, const char *s)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ParseCommandArg(Client &client, unsigned &value_r, const char *s)
|
||||||
|
{
|
||||||
|
return ParseCommandArg(client, value_r, s,
|
||||||
|
std::numeric_limits<unsigned>::max());
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ParseCommandArg(Client &client, bool &value_r, const char *s)
|
ParseCommandArg(Client &client, bool &value_r, const char *s)
|
||||||
{
|
{
|
||||||
|
@ -33,6 +33,10 @@ class SignedSongTime;
|
|||||||
bool
|
bool
|
||||||
check_uint32(Client &client, uint32_t *dst, const char *s);
|
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
|
bool
|
||||||
ParseCommandArg(Client &client, int &value_r, const char *s);
|
ParseCommandArg(Client &client, int &value_r, const char *s);
|
||||||
|
|
||||||
@ -48,6 +52,10 @@ struct RangeArg {
|
|||||||
bool
|
bool
|
||||||
ParseCommandArg(Client &client, RangeArg &value_r, const char *s);
|
ParseCommandArg(Client &client, RangeArg &value_r, const char *s);
|
||||||
|
|
||||||
|
bool
|
||||||
|
ParseCommandArg(Client &client, unsigned &value_r, const char *s,
|
||||||
|
unsigned max_value);
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ParseCommandArg(Client &client, unsigned &value_r, const char *s);
|
ParseCommandArg(Client &client, unsigned &value_r, const char *s);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user