]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
devlink: implement command line args dry parsing
authorJiri Pirko <jiri@nvidia.com>
Wed, 6 Sep 2023 11:11:10 +0000 (13:11 +0200)
committerDavid Ahern <dsahern@kernel.org>
Mon, 11 Sep 2023 15:16:27 +0000 (09:16 -0600)
In preparation to the follow-up dump selector patch, introduce function
dl_argv_dry_parse() which allows to do dry parsing of command line
arguments without printing out any error messages to the user.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
devlink/devlink.c

index f383028ec5603299ea40a9ab43ef5050cd070fc4..083a30d7536cc54950bf8998b786b5c8162f3b03 100644 (file)
@@ -64,6 +64,7 @@
 static int g_new_line_count;
 static int g_indent_level;
 static bool g_indent_newline;
+static bool g_err_suspended;
 
 #define INDENT_STR_STEP 2
 #define INDENT_STR_MAXLEN 32
@@ -74,6 +75,8 @@ pr_err(const char *fmt, ...)
 {
        va_list ap;
 
+       if (g_err_suspended)
+               return;
        va_start(ap, fmt);
        vfprintf(stderr, fmt, ap);
        va_end(ap);
@@ -2284,6 +2287,21 @@ static int dl_argv_parse(struct dl *dl, uint64_t o_required,
        return dl_args_finding_required_validate(o_required, o_found);
 }
 
+static int dl_argv_dry_parse(struct dl *dl, uint64_t o_required,
+                            uint64_t o_optional)
+{
+       char **argv = dl->argv;
+       int argc = dl->argc;
+       int err;
+
+       g_err_suspended = true;
+       err = dl_argv_parse(dl, o_required, o_optional);
+       g_err_suspended = false;
+       dl->argv = argv;
+       dl->argc = argc;
+       return err;
+}
+
 static void
 dl_function_attr_put(struct nlmsghdr *nlh, const struct dl_opts *opts)
 {