9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Msrc/dlang/dlang.c | 41++++++++++++++++++++++++-----------------
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", }, {