aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicm <nicm>2021-08-21 08:44:59 +0000
committernicm <nicm>2021-08-21 08:44:59 +0000
commitd371764d022b6c074f967faee815c3117203451e (patch)
treecb72547360e45a53b6ad1418a75ba6f7f9b11a74
parentd589be6c65c7295880bb84cd875baab2f77d5067 (diff)
downloadrtmux-d371764d022b6c074f967faee815c3117203451e.tar.gz
rtmux-d371764d022b6c074f967faee815c3117203451e.tar.bz2
rtmux-d371764d022b6c074f967faee815c3117203451e.zip
Wrap command argument definitions in their own struct.
-rw-r--r--arguments.c9
-rw-r--r--cmd.c3
-rw-r--r--tmux.h15
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 *);