summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiri Pirko <jiri@nvidia.com>2023-09-06 13:11:10 +0200
committerDavid Ahern <dsahern@kernel.org>2023-09-11 09:16:27 -0600
commit8eb894eda67d4cc0eedf0e014a4484661e896f8d (patch)
treeff05063a4ac1002e880131ef20f0fa5c912bed85
parent5d9f42124ccd9696d835e42527020ae9fece92e6 (diff)
devlink: implement command line args dry parsing
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>
-rw-r--r--devlink/devlink.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/devlink/devlink.c b/devlink/devlink.c
index f383028e..083a30d7 100644
--- a/devlink/devlink.c
+++ b/devlink/devlink.c
@@ -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)
{