From: Jiri Pirko Date: Wed, 6 Sep 2023 11:11:10 +0000 (+0200) Subject: devlink: implement command line args dry parsing X-Git-Tag: v6.6.0~23^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8eb894eda67d4cc0eedf0e014a4484661e896f8d;p=thirdparty%2Fiproute2.git 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 Signed-off-by: David Ahern --- diff --git a/devlink/devlink.c b/devlink/devlink.c index f383028ec..083a30d75 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) {