This aligns getopt, getopt_long, etc to have the same const
attributes as Linux and FreeBSD. The changes are derived from
the FreeBSD version of getopt_long.

Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
---
 lib/eal/windows/getopt.c         | 23 ++++++++++++-----------
 lib/eal/windows/include/getopt.h |  8 ++++----
 2 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/lib/eal/windows/getopt.c b/lib/eal/windows/getopt.c
index a1f51c6c2318..50ff71b9300d 100644
--- a/lib/eal/windows/getopt.c
+++ b/lib/eal/windows/getopt.c
@@ -20,7 +20,7 @@
 #include <string.h>
 #include <stdlib.h>
 
-const char    *optarg;         /* argument associated with option */
+char    *optarg;               /* argument associated with option */
 int    opterr = 1;             /* if error message should be printed */
 int    optind = 1;             /* index into parent argv vector */
 int    optopt = '?';           /* character checked for validity */
@@ -39,9 +39,9 @@ static void pass(const char *a) {(void) a; }
 #define        BADARG          ((*options == ':') ? (int)':' : (int)'?')
 #define        INORDER         1
 
-#define        EMSG            ""
+static char EMSG[] = "";
 
-static const char *place = EMSG; /* option letter processing */
+static char *place = EMSG; /* option letter processing */
 
 /* XXX: set optreset to 1 rather than these two */
 static int nonopt_start = -1; /* first non option argument (for permute) */
@@ -80,7 +80,7 @@ gcd(int a, int b)
  */
 static void
 permute_args(int panonopt_start, int panonopt_end, int opt_end,
-       char **nargv)
+       char * const *nargv)
 {
        int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos;
        char *swap;
@@ -101,11 +101,12 @@ permute_args(int panonopt_start, int panonopt_end, int 
opt_end,
                                pos -= nnonopts;
                        else
                                pos += nopts;
+
                        swap = nargv[pos];
                        /* LINTED const cast */
-                       ((char **) nargv)[pos] = nargv[cstart];
+                       ((char **)(uintptr_t)nargv)[pos] = nargv[cstart];
                        /* LINTED const cast */
-                       ((char **)nargv)[cstart] = swap;
+                       ((char **)(uintptr_t)nargv)[cstart] = swap;
                }
        }
 }
@@ -116,7 +117,7 @@ permute_args(int panonopt_start, int panonopt_end, int 
opt_end,
  * Returns -1 if short_too is set and the option does not match long_options.
  */
 static int
-parse_long_options(char **nargv, const char *options,
+parse_long_options(char * const *nargv, const char *options,
        const struct option *long_options, int *idx, int short_too)
 {
        const char *current_argv;
@@ -236,7 +237,7 @@ parse_long_options(char **nargv, const char *options,
  *     Parse argc/argv argument vector.  Called by user level routines.
  */
 static int
-getopt_internal(int nargc, char **nargv, const char *options,
+getopt_internal(int nargc, char *const nargv[], const char *options,
        const struct option *long_options, int *idx, int flags)
 {
        char *oli;                              /* option letter list index */
@@ -434,7 +435,7 @@ getopt_internal(int nargc, char **nargv, const char 
*options,
  *     Parse argc/argv argument vector.
  */
 int
-getopt(int nargc, char *nargv[], const char *options)
+getopt(int nargc, char *const nargv[], const char *options)
 {
        return getopt_internal(nargc, nargv, options, NULL, NULL,
                               FLAG_PERMUTE);
@@ -445,7 +446,7 @@ getopt(int nargc, char *nargv[], const char *options)
  *     Parse argc/argv argument vector.
  */
 int
-getopt_long(int nargc, char *nargv[], const char *options,
+getopt_long(int nargc, char *const nargv[], const char *options,
        const struct option *long_options, int *idx)
 {
 
@@ -458,7 +459,7 @@ getopt_long(int nargc, char *nargv[], const char *options,
  *     Parse argc/argv argument vector.
  */
 int
-getopt_long_only(int nargc, char *nargv[], const char *options,
+getopt_long_only(int nargc, char *const nargv[], const char *options,
        const struct option *long_options, int *idx)
 {
 
diff --git a/lib/eal/windows/include/getopt.h b/lib/eal/windows/include/getopt.h
index 6f57af454b17..e4cf6873cb0c 100644
--- a/lib/eal/windows/include/getopt.h
+++ b/lib/eal/windows/include/getopt.h
@@ -44,7 +44,7 @@
 
 
 /** argument to current option, or NULL if it has none */
-extern const char *optarg;
+extern char *optarg;
 /** Current position in arg string.  Starts from 1.
  * Setting to 0 resets state.
  */
@@ -80,14 +80,14 @@ struct option {
 };
 
 /** Compat: getopt */
-int getopt(int argc, char *argv[], const char *options);
+int getopt(int argc, char *const argv[], const char *options);
 
 /** Compat: getopt_long */
-int getopt_long(int argc, char *argv[], const char *options,
+int getopt_long(int argc, char *const argv[], const char *options,
                const struct option *longopts, int *longindex);
 
 /** Compat: getopt_long_only */
-int getopt_long_only(int nargc, char *argv[], const char *options,
+int getopt_long_only(int nargc, char *const argv[], const char *options,
                     const struct option *long_options, int *idx);
 
 
-- 
2.39.2

Reply via email to