From d371764d022b6c074f967faee815c3117203451e Mon Sep 17 00:00:00 2001 From: nicm Date: Sat, 21 Aug 2021 08:44:59 +0000 Subject: [PATCH] Wrap command argument definitions in their own struct. --- arguments.c | 9 +++++---- cmd.c | 3 +-- tmux.h | 15 +++++++++------ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/arguments.c b/arguments.c index ad3e20b3..77ca8e73 100644 --- a/arguments.c +++ b/arguments.c @@ -79,7 +79,7 @@ args_create(void) /* Parse an argv and argc into a new argument set. */ struct args * -args_parse(const char *template, int argc, char **argv, int lower, int upper) +args_parse(const struct args_parse *parse, int argc, char **argv) { struct args *args; int opt; @@ -89,10 +89,10 @@ args_parse(const char *template, int argc, char **argv, int lower, int upper) optarg = NULL; args = args_create(); - while ((opt = getopt(argc, argv, template)) != -1) { + while ((opt = getopt(argc, argv, parse->template)) != -1) { if (opt < 0) continue; - if (opt == '?' || strchr(template, opt) == NULL) { + if (opt == '?' || strchr(parse->template, opt) == NULL) { args_free(args); return (NULL); } @@ -105,7 +105,8 @@ args_parse(const char *template, int argc, char **argv, int lower, int upper) args->argc = argc; args->argv = cmd_copy_argv(argc, argv); - if ((lower != -1 && argc < lower) || (upper != -1 && argc > upper)) { + if ((parse->lower != -1 && argc < parse->lower) || + (parse->upper != -1 && argc > parse->upper)) { args_free(args); return (NULL); } diff --git a/cmd.c b/cmd.c index 4f13e90e..29f2d130 100644 --- a/cmd.c +++ b/cmd.c @@ -518,8 +518,7 @@ cmd_parse(int argc, char **argv, const char *file, u_int line, char **cause) return (NULL); cmd_log_argv(argc, argv, "%s: %s", __func__, entry->name); - args = args_parse(entry->args.template, argc, argv, entry->args.lower, - entry->args.upper); + args = args_parse(&entry->args, argc, argv); if (args == NULL) goto usage; diff --git a/tmux.h b/tmux.h index a28deb74..43881c1d 100644 --- a/tmux.h +++ b/tmux.h @@ -1365,6 +1365,13 @@ struct args_value { struct args_entry; RB_HEAD(args_tree, args_entry); +/* Arguments parsing state. */ +struct args_parse { + const char *template; + int lower; + int upper; +}; + /* Command find structures. */ enum cmd_find_type { CMD_FIND_PANE, @@ -1453,11 +1460,7 @@ struct cmd_entry { const char *name; const char *alias; - struct { - const char *template; - int lower; - int upper; - } args; + struct args_parse args; const char *usage; struct cmd_entry_flag source; @@ -2183,7 +2186,7 @@ int tty_keys_next(struct tty *); /* arguments.c */ void args_set(struct args *, u_char, const char *); struct args *args_create(void); -struct args *args_parse(const char *, int, char **, int, int); +struct args *args_parse(const struct args_parse *, int, char **); void args_vector(struct args *, int *, char ***); void args_free(struct args *); char *args_print(struct args *);