#include <string.h>
#include <errno.h>
-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);
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)
}
#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; \
};
#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; \
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);
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;
}