[ovs-dev] [PATCH v3] command-line.c: Support parsing ctl options via env variable

Ben Pfaff blp at ovn.org
Fri Oct 25 19:48:23 UTC 2019


On Fri, Oct 25, 2019 at 12:33:52PM -0700, amginwal at gmail.com wrote:
> From: Aliasgar Ginwala <aginwala at ebay.com>
> 
> Signed-off-by: Aliasgar Ginwala <aginwala at ebay.com>

I tweaked this a little further and applied it to master as follows.

Thank you!

-8<--------------------------cut here-------------------------->8--

From: Aliasgar Ginwala <aginwala at ebay.com>
Date: Fri, 25 Oct 2019 12:33:52 -0700
Subject: [PATCH] command-line: New function ovs_cmdl_env_parse_all().

This function allows an environment variable to be included in
command-line parsing.  It will receive its first user in an
upcoming commit.

Signed-off-by: Aliasgar Ginwala <aginwala at ebay.com>
Signed-off-by: Ben Pfaff <blp at ovn.org>
---
 lib/command-line.c | 24 ++++++++++++++++++++++++
 lib/command-line.h |  3 +++
 2 files changed, 27 insertions(+)

diff --git a/lib/command-line.c b/lib/command-line.c
index 9e000bd28d1a..967f4f5d5846 100644
--- a/lib/command-line.c
+++ b/lib/command-line.c
@@ -19,6 +19,7 @@
 #include <getopt.h>
 #include <limits.h>
 #include <stdlib.h>
+#include "svec.h"
 #include "openvswitch/dynamic-string.h"
 #include "ovs-thread.h"
 #include "util.h"
@@ -77,6 +78,29 @@ find_option_by_value(const struct option *options, int value)
     return NULL;
 }
 
+/* Parses options set using environment variable.  The caller specifies the
+ * supported options in environment variable.  On success, adds the parsed
+ * env variables in 'argv', the number of options in 'argc', and returns argv.
+ *  */
+char **
+ovs_cmdl_env_parse_all(int *argcp, char *argv[], const char *env_options)
+{
+    ovs_assert(*argcp > 0);
+
+    struct svec args = SVEC_EMPTY_INITIALIZER;
+    svec_add(&args, argv[0]);
+    if (env_options) {
+        svec_parse_words(&args, env_options);
+    }
+    for (int i = 1; i < *argcp; i++) {
+        svec_add(&args, argv[i]);
+    }
+    svec_terminate(&args);
+
+    *argcp = args.n;
+    return args.names;
+}
+
 /* Parses the command-line options in 'argc' and 'argv'.  The caller specifies
  * the supported options in 'options'.  On success, stores the parsed options
  * in '*pop', the number of options in '*n_pop', and returns NULL.  On failure,
diff --git a/lib/command-line.h b/lib/command-line.h
index 9d62dc2501c5..fc2a2690f688 100644
--- a/lib/command-line.h
+++ b/lib/command-line.h
@@ -54,6 +54,9 @@ char *ovs_cmdl_parse_all(int argc, char *argv[], const struct option *,
                          struct ovs_cmdl_parsed_option **, size_t *)
     OVS_WARN_UNUSED_RESULT;
 
+char **ovs_cmdl_env_parse_all(int *argcp, char *argv_[],
+                              const char *env_options);
+
 void ovs_cmdl_print_options(const struct option *options);
 void ovs_cmdl_print_commands(const struct ovs_cmdl_command *commands);
 
-- 
2.21.0



More information about the dev mailing list