Wrap command argument definitions in their own struct.
authornicm <nicm@openbsd.org>
Sat, 21 Aug 2021 08:44:59 +0000 (08:44 +0000)
committernicm <nicm@openbsd.org>
Sat, 21 Aug 2021 08:44:59 +0000 (08:44 +0000)
usr.bin/tmux/arguments.c
usr.bin/tmux/cmd.c
usr.bin/tmux/tmux.h

index 6bcbe2d..b38b074 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: arguments.c,v 1.39 2021/08/20 20:08:30 nicm Exp $ */
+/* $OpenBSD: arguments.c,v 1.40 2021/08/21 08:44:59 nicm Exp $ */
 
 /*
  * Copyright (c) 2010 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -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);
        }
index 343375c..c255c16 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd.c,v 1.166 2021/08/20 19:50:17 nicm Exp $ */
+/* $OpenBSD: cmd.c,v 1.167 2021/08/21 08:44:59 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -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;
 
index e06d12d..07010cb 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.1127 2021/08/20 19:50:17 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.1128 2021/08/21 08:44:59 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -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 *);