getopt: Make code more portable.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 12 Jan 2011 16:08:22 +0000 (16:08 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 12 Jan 2011 16:54:21 +0000 (16:54 +0000)
src/getopt/SConscript
src/getopt/getopt.h
src/getopt/getopt_long.c

index 0fbaab4af9cdd01d8187f9d0c2df8bc554c07f92..14cabed4e643e2a3fda09cad7daa24c205377d26 100644 (file)
@@ -5,6 +5,8 @@ if not env['msvc']:
 
 env = env.Clone()
 
+env.Prepend(CPPPATH = ['.'])
+
 getopt = env.ConvenienceLibrary(
     target = 'getopt',
     source = ['getopt_long.c'],
index 0311b078b71e99238253de5177ce7f51811f7c93..117608f485e7b3bb4e9e37ae96c9016dc2147908 100644 (file)
@@ -33,8 +33,6 @@
 #ifndef _GETOPT_H_
 #define _GETOPT_H_
 
-#include <sys/cdefs.h>
-
 /*
  * GNU-like getopt_long() and 4.4BSD getsubopt()/optreset extensions
  */
 #define required_argument  1
 #define optional_argument  2
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 struct option {
        /* name of long option */
        const char *name;
@@ -56,7 +58,6 @@ struct option {
        int val;
 };
 
-__BEGIN_DECLS
 int     getopt_long(int, char * const *, const char *,
            const struct option *, int *);
 int     getopt_long_only(int, char * const *, const char *,
@@ -73,6 +74,9 @@ extern   int optopt;
 extern   int optreset;
 extern   char *suboptarg;               /* getsubopt(3) external variable */
 #endif
-__END_DECLS
+
+#ifdef __cplusplus
+}
+#endif
  
 #endif /* !_GETOPT_H_ */
index eb1e3ef4be5e777e19fd721e38501b7a82f3c38f..81268b83953abe3c768a5113b7f1c51da0d57ca1 100644 (file)
@@ -49,9 +49,9 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <err.h>
 #include <errno.h>
 #include <getopt.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -198,7 +198,7 @@ parse_long_options(char * const *nargv, const char *options,
                else {
                        /* ambiguous abbreviation */
                        if (PRINT_ERROR)
-                               warnx(ambig, (int)current_argv_len,
+                               fprintf(stderr, ambig, (int)current_argv_len,
                                     current_argv);
                        optopt = 0;
                        return (BADCH);
@@ -208,7 +208,7 @@ parse_long_options(char * const *nargv, const char *options,
                if (long_options[match].has_arg == no_argument
                    && has_equal) {
                        if (PRINT_ERROR)
-                               warnx(noarg, (int)current_argv_len,
+                               fprintf(stderr, noarg, (int)current_argv_len,
                                     current_argv);
                        /*
                         * XXX: GNU sets optopt to val regardless of flag
@@ -238,7 +238,7 @@ parse_long_options(char * const *nargv, const char *options,
                         * should be generated.
                         */
                        if (PRINT_ERROR)
-                               warnx(recargstring,
+                               fprintf(stderr, recargstring,
                                    current_argv);
                        /*
                         * XXX: GNU sets optopt to val regardless of flag
@@ -256,7 +256,7 @@ parse_long_options(char * const *nargv, const char *options,
                        return (-1);
                }
                if (PRINT_ERROR)
-                       warnx(illoptstring, current_argv);
+                       fprintf(stderr, illoptstring, current_argv);
                optopt = 0;
                return (BADCH);
        }
@@ -418,7 +418,7 @@ start:
                if (!*place)
                        ++optind;
                if (PRINT_ERROR)
-                       warnx(illoptchar, optchar);
+                       fprintf(stderr, illoptchar, optchar);
                optopt = optchar;
                return (BADCH);
        }
@@ -429,7 +429,7 @@ start:
                else if (++optind >= nargc) {   /* no arg */
                        place = EMSG;
                        if (PRINT_ERROR)
-                               warnx(recargchar, optchar);
+                               fprintf(stderr, recargchar, optchar);
                        optopt = optchar;
                        return (BADARG);
                } else                          /* white space */
@@ -450,7 +450,7 @@ start:
                        if (++optind >= nargc) {        /* no arg */
                                place = EMSG;
                                if (PRINT_ERROR)
-                                       warnx(recargchar, optchar);
+                                       fprintf(stderr, recargchar, optchar);
                                optopt = optchar;
                                return (BADARG);
                        } else