The code to parse for log-level option should be same on
all OS variants.

Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
---
 lib/eal/common/eal_common_options.c | 46 +++++++++++++++++++++++++++++
 lib/eal/common/eal_options.h        |  1 +
 lib/eal/freebsd/eal.c               | 42 --------------------------
 lib/eal/linux/eal.c                 | 39 ------------------------
 lib/eal/windows/eal.c               | 35 ----------------------
 5 files changed, 47 insertions(+), 116 deletions(-)

diff --git a/lib/eal/common/eal_common_options.c 
b/lib/eal/common/eal_common_options.c
index e541f07939..5435399b85 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -1640,6 +1640,51 @@ eal_parse_huge_unlink(const char *arg, struct 
hugepage_file_discipline *out)
        return -1;
 }
 
+/* Parse the all arguments looking for log related ones */
+int
+eal_log_level_parse(int argc, char * const argv[])
+{
+       struct internal_config *internal_conf = 
eal_get_internal_configuration();
+       int option_index, opt;
+       const int old_optind = optind;
+       const int old_optopt = optopt;
+       const int old_opterr = opterr;
+       char *old_optarg = optarg;
+#ifdef RTE_EXEC_ENV_FREEBSD
+       const int old_optreset = optreset;
+       optreset = 1;
+#endif
+
+       optind = 1;
+       opterr = 0;
+
+       while ((opt = getopt_long(argc, argv, eal_short_options,
+                                 eal_long_options, &option_index)) != EOF) {
+
+               switch (opt) {
+               case OPT_LOG_LEVEL_NUM:
+                       if (eal_parse_common_option(opt, optarg, internal_conf) 
< 0)
+                               return -1;
+                       break;
+               case '?':
+                       /* getopt is not happy, stop right now */
+                       goto out;
+               default:
+                       continue;
+               }
+       }
+out:
+       /* restore getopt lib */
+       optind = old_optind;
+       optopt = old_optopt;
+       optarg = old_optarg;
+       opterr = old_opterr;
+#ifdef RTE_EXEC_ENV_FREEBSD
+       optreset = old_optreset;
+#endif
+       return 0;
+}
+
 int
 eal_parse_common_option(int opt, const char *optarg,
                        struct internal_config *conf)
@@ -2173,6 +2218,7 @@ rte_vect_set_max_simd_bitwidth(uint16_t bitwidth)
        return 0;
 }
 
+
 void
 eal_common_usage(void)
 {
diff --git a/lib/eal/common/eal_options.h b/lib/eal/common/eal_options.h
index 3cc9cb6412..f3f2e104f6 100644
--- a/lib/eal/common/eal_options.h
+++ b/lib/eal/common/eal_options.h
@@ -96,6 +96,7 @@ enum {
 extern const char eal_short_options[];
 extern const struct option eal_long_options[];
 
+int eal_log_level_parse(int argc, char * const argv[]);
 int eal_parse_common_option(int opt, const char *argv,
                            struct internal_config *conf);
 int eal_option_device_parse(void);
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index bab77118e9..9825bcea0b 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -363,48 +363,6 @@ eal_get_hugepage_mem_size(void)
        return (size < SIZE_MAX) ? (size_t)(size) : SIZE_MAX;
 }
 
-/* Parse the arguments for --log-level only */
-static void
-eal_log_level_parse(int argc, char **argv)
-{
-       int opt;
-       char **argvopt;
-       int option_index;
-       const int old_optind = optind;
-       const int old_optopt = optopt;
-       const int old_optreset = optreset;
-       char * const old_optarg = optarg;
-       struct internal_config *internal_conf =
-               eal_get_internal_configuration();
-
-       argvopt = argv;
-       optind = 1;
-       optreset = 1;
-
-       while ((opt = getopt_long(argc, argvopt, eal_short_options,
-                                 eal_long_options, &option_index)) != EOF) {
-
-               int ret;
-
-               /* getopt is not happy, stop right now */
-               if (opt == '?')
-                       break;
-
-               ret = (opt == OPT_LOG_LEVEL_NUM) ?
-                   eal_parse_common_option(opt, optarg, internal_conf) : 0;
-
-               /* common parser is not happy */
-               if (ret < 0)
-                       break;
-       }
-
-       /* restore getopt lib */
-       optind = old_optind;
-       optopt = old_optopt;
-       optreset = old_optreset;
-       optarg = old_optarg;
-}
-
 /* Parse the argument given in the command line of the application */
 static int
 eal_parse_args(int argc, char **argv)
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index fd422f1f62..bffeb1f34e 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -546,45 +546,6 @@ eal_parse_vfio_vf_token(const char *vf_token)
        return -1;
 }
 
-/* Parse the arguments for --log-level only */
-static void
-eal_log_level_parse(int argc, char **argv)
-{
-       int opt;
-       char **argvopt;
-       int option_index;
-       const int old_optind = optind;
-       const int old_optopt = optopt;
-       char * const old_optarg = optarg;
-       struct internal_config *internal_conf =
-               eal_get_internal_configuration();
-
-       argvopt = argv;
-       optind = 1;
-
-       while ((opt = getopt_long(argc, argvopt, eal_short_options,
-                                 eal_long_options, &option_index)) != EOF) {
-
-               int ret;
-
-               /* getopt is not happy, stop right now */
-               if (opt == '?')
-                       break;
-
-               ret = (opt == OPT_LOG_LEVEL_NUM) ?
-                       eal_parse_common_option(opt, optarg, internal_conf) : 0;
-
-               /* common parser is not happy */
-               if (ret < 0)
-                       break;
-       }
-
-       /* restore getopt lib */
-       optind = old_optind;
-       optopt = old_optopt;
-       optarg = old_optarg;
-}
-
 static int
 eal_parse_huge_worker_stack(const char *arg)
 {
diff --git a/lib/eal/windows/eal.c b/lib/eal/windows/eal.c
index 8ca00c0f95..44e20643f2 100644
--- a/lib/eal/windows/eal.c
+++ b/lib/eal/windows/eal.c
@@ -96,41 +96,6 @@ eal_usage(const char *prgname)
        }
 }
 
-/* Parse the arguments for --log-level only */
-static void
-eal_log_level_parse(int argc, char **argv)
-{
-       int opt;
-       char **argvopt;
-       int option_index;
-       struct internal_config *internal_conf =
-               eal_get_internal_configuration();
-
-       argvopt = argv;
-
-       eal_reset_internal_config(internal_conf);
-
-       while ((opt = getopt_long(argc, argvopt, eal_short_options,
-               eal_long_options, &option_index)) != EOF) {
-
-               int ret;
-
-               /* getopt is not happy, stop right now */
-               if (opt == '?')
-                       break;
-
-               ret = (opt == OPT_LOG_LEVEL_NUM) ?
-                       eal_parse_common_option(opt, optarg,
-                               internal_conf) : 0;
-
-               /* common parser is not happy */
-               if (ret < 0)
-                       break;
-       }
-
-       optind = 0; /* reset getopt lib */
-}
-
 /* Parse the argument given in the command line of the application */
 static int
 eal_parse_args(int argc, char **argv)
-- 
2.43.0

Reply via email to