From 3ee894092b84a5cf23a4a38783831dd3bed0fe3a Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Sun, 26 Apr 2015 18:43:16 +0000 Subject: [PATCH] =?utf8?q?Passa=20n=C3=BAmero=20de=20argumentos=20para=20c?= =?utf8?q?omandos.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- base.c | 18 +++++++++--------- cmd.c | 4 +++- cmd.h | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/base.c b/base.c index fdc7980..c6b057d 100644 --- a/base.c +++ b/base.c @@ -22,10 +22,10 @@ #include #include -static int set_int(char **args, int *val) +static int set_int(char **args, int argc, int *val) { char *end = NULL; - if (args[0] == NULL || args[1] == NULL) + if (argc != 2) return -EINVAL; errno = 0; *val = strtol(args[1], &end, 0); @@ -36,9 +36,9 @@ static int set_int(char **args, int *val) return 0; } -static int set_string(char **args, char **str) +static int set_string(char **args, int argc, char **str) { - if (args[0] == NULL || args[1] == NULL) + if (argc != 2) return -EINVAL; *str = strdup(args[1]); if (!*str) @@ -47,10 +47,10 @@ static int set_string(char **args, char **str) } #define SET_INT(attr) \ -static int run_##attr(struct declaracao *dec, char **args) \ +static int run_##attr(struct declaracao *dec, char **args, int argc) \ { \ int val; \ - int r = set_int(args, &val); \ + int r = set_int(args, argc, &val); \ if (r) \ return r; \ dec->attr = val; \ @@ -62,10 +62,10 @@ static struct cmd cmd_##attr = { \ }; #define SET_STRING(attr) \ -static int run_##attr(struct declaracao *dec, char **args) \ +static int run_##attr(struct declaracao *dec, char **args, int argc) \ { \ char *val; \ - int r = set_string(args, &val); \ + int r = set_string(args, argc, &val); \ if (r) \ return r; \ dec->attr = val; \ @@ -80,7 +80,7 @@ SET_INT(ano); SET_STRING(cpf); SET_STRING(nome); -static int run_dump(struct declaracao *dec, char **args) +static int run_dump(struct declaracao *dec, char **args, int argc) { printf("ano: %d\n", dec->ano); printf("cpf: %s\n", dec->cpf); diff --git a/cmd.c b/cmd.c index ec7b6dc..65398de 100644 --- a/cmd.c +++ b/cmd.c @@ -42,14 +42,16 @@ int cmd_run(struct declaracao *dec, char *line) char **args = tokens_new(line); struct cmd *cmd; int r; + int argc; if (!args) return -errno; + for (argc = 0; args[argc]; argc++); cmd = pmhash_get(cmds, args[0]); if (!cmd || !cmd->run) { tokens_free(args); return -EINVAL; } - r = cmd->run(dec, args); + r = cmd->run(dec, args, argc); tokens_free(args); return r; } diff --git a/cmd.h b/cmd.h index e3f1250..24ff5e0 100644 --- a/cmd.h +++ b/cmd.h @@ -23,7 +23,7 @@ struct cmd { char *name; - int (*run) (struct declaracao *dec, char **args); + int (*run) (struct declaracao *dec, char **args, int argc); }; int cmd_init(void); -- 2.20.1