commit 4a165294bfee468a2d625e94c17bc1f8960df898
parent e7fdfd24cce777575cb7df421dd712ea4f2af986
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date: Fri, 9 Nov 2018 13:02:52 +0000
Add min/max argc fields in the cmd struct
Change-Id: If9ffde212534d9bee06c4eacf988c854f967ba9d
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>
Diffstat:
1 file changed, 24 insertions(+), 17 deletions(-)
diff --git a/src/dlang/dlang.c b/src/dlang/dlang.c
@@ -22,8 +22,10 @@ struct args {
struct cmd {
char *name;
- int (*eval)(const struct cmd *cmd, struct args *args);
char *helpmsg;
+ int (*eval)(const struct cmd *cmd, struct args *args);
+ unsigned char min;
+ unsigned char max;
};
struct named_reg {
@@ -141,9 +143,6 @@ do_set(const struct cmd *cmd, struct args *args)
unsigned long long *reg = NULL;
unsigned long long setval = 0;
- if (args->argc != 3)
- error(cmd->helpmsg);
-
reg = get_named_reg(args->argv[1]);
if (reg == NULL)
error("Register '%s' not found", args->argv[1]);
@@ -158,9 +157,6 @@ do_get(const struct cmd *cmd, struct args *args)
{
unsigned long long *reg = NULL;
- if (args->argc != 2)
- error(cmd->helpmsg);
-
reg = get_named_reg(args->argv[1]);
if (reg == NULL)
error("Register '%s' not found", args->argv[1]);
@@ -189,9 +185,6 @@ do_rmc(const struct cmd *cmd, struct args *args)
unsigned char class;
unsigned char func;
- if (args->argc != 3)
- error(cmd->helpmsg);
-
class = estrtoull(args->argv[1], 0);
func = estrtoull(args->argv[2], 0);
@@ -207,9 +200,6 @@ do_rmu(const struct cmd *cmd, struct args *args)
{
const struct rmudesc *rmudesc;
- if (args->argc != 2)
- error(cmd->helpmsg);
-
if (args->argv[1][0] == '?') {
for (rmudesc = rmudescs; rmudesc->name; rmudesc++)
puts(rmudesc->name);
@@ -237,8 +227,6 @@ do_exit(const struct cmd *cmd, struct args *args)
case 1:
args->status = 0;
break;
- default:
- error(cmd->helpmsg);
}
return -1;
}
@@ -293,8 +281,11 @@ run(struct args *args)
error("line too long");
buffer[len-1] = '\0';
cmd = parse_cmd(buffer, args);
- if (cmd)
+ if (cmd) {
+ if (args->argc < cmd->min || args->argc > cmd->max)
+ error(cmd->helpmsg);
return cmd->eval(cmd, args);
+ }
}
return 0;
@@ -329,41 +320,57 @@ static const struct cmd cmds[] = {
{
.name = "set",
.eval = do_set,
+ .min = 3,
+ .max = 3,
.helpmsg = "Set a register: set <reg> <value>",
},
{
.name = "get",
.eval = do_get,
+ .min = 2,
+ .max = 2,
.helpmsg = "Get a register: get <reg>",
},
{
.name = "dump",
.eval = do_dump,
+ .min = 1,
+ .max = 1,
.helpmsg = "Dump trapframe: dump",
},
{
.name = "trap",
.eval = do_trap,
+ .min = 1,
+ .max = 1,
.helpmsg = "Call trap handler: trap",
},
{
.name = "rmc",
.eval = do_rmc,
+ .min = 3,
+ .max = 3,
.helpmsg = "Call RMC handler: rmc imm1 imm2",
},
{
.name = "rmu",
.eval = do_rmu,
+ .min = 2,
+ .max = 2,
.helpmsg = "Call RMU handler: rmu rmucmd",
},
{
.name = "exit",
.eval = do_exit,
- .helpmsg = "Exit debug environment: exit",
+ .min = 1,
+ .max = 2,
+ .helpmsg = "Exit debug environment: exit [status]",
},
{
.name = "help",
.eval = do_help,
+ .min = 1,
+ .max = 1,
.helpmsg = "Print this help menu: help",
},
{