RELEASE-NOTES: two more bug fixes
[platform/upstream/c-ares.git] / ares_getopt.c
index 3ed40cd..1e02d08 100644 (file)
@@ -3,7 +3,6 @@
  * on 2007-04-11.  Lifted from version 5.2 of the 'Open Mash' project with
  * the modified BSD license, BSD license without the advertising clause.
  *
- * $Id$
  */
 
 /*
  */
 
 /* #if !defined(lint)
- * static char sccsid[] = "@(#)getopt.c        8.2 (Berkeley) 4/2/94";
+ * static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
  * #endif
  */
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include "ares_getopt.h"
 
-/* declarations to provide consistent linkage */
-extern char *optarg;
-extern int optind;
-extern int opterr;
+int   opterr = 1,     /* if error message should be printed */
+      optind = 1;     /* index into parent argv vector */
+int   optopt = 0;     /* character checked for validity */
+static int optreset;  /* reset getopt */
+char  *optarg;        /* argument associated with option */
 
-int    opterr = 1,             /* if error message should be printed */
-       optind = 1,             /* index into parent argv vector */
-       optopt,                 /* character checked for validity */
-       optreset;               /* reset getopt */
-char   *optarg;                /* argument associated with option */
-
-#define        BADCH   (int)'?'
-#define        BADARG  (int)':'
-#define        EMSG    ""
+#define  BADCH   (int)'?'
+#define  BADARG  (int)':'
+#define  EMSG    (char *)""
 
 /*
- * getopt --
- *     Parse argc/argv argument vector.
+ * ares_getopt --
+ *    Parse argc/argv argument vector.
  */
 int
-getopt(nargc, nargv, ostr)
-       int nargc;
-       char * const *nargv;
-       const char *ostr;
+ares_getopt(int nargc, char * const nargv[], const char *ostr)
 {
-       static char *place = EMSG;              /* option letter processing */
-       char *oli;                              /* option letter list index */
+    static char *place = EMSG;                /* option letter processing */
+    char *oli;                                /* option letter list index */
 
-       if (optreset || !*place) {              /* update scanning pointer */
-               optreset = 0;
-               if (optind >= nargc || *(place = nargv[optind]) != '-') {
-                       place = EMSG;
-                       return (EOF);
-               }
-               if (place[1] && *++place == '-') {      /* found "--" */
-                       ++optind;
-                       place = EMSG;
-                       return (EOF);
-               }
-       }                                       /* option letter okay? */
-       if ((optopt = (int)*place++) == (int)':' ||
-           !(oli = strchr(ostr, optopt))) {
-               /*
-                * if the user didn't specify '-' as an option,
-                * assume it means EOF.
-                */
-               if (optopt == (int)'-')
-                       return (EOF);
-               if (!*place)
-                       ++optind;
-               if (opterr && *ostr != ':')
-                       (void)fprintf(stderr,
-                           "%s: illegal option -- %c\n", __FILE__, optopt);
-               return (BADCH);
-       }
-       if (*++oli != ':') {                    /* don't need argument */
-               optarg = NULL;
-               if (!*place)
-                       ++optind;
-       }
-       else {                                  /* need an argument */
-               if (*place)                     /* no white space */
-                       optarg = place;
-               else if (nargc <= ++optind) {   /* no arg */
-                       place = EMSG;
-                       if (*ostr == ':')
-                               return (BADARG);
-                       if (opterr)
-                               (void)fprintf(stderr,
-                                   "%s: option requires an argument -- %c\n",
-                                   __FILE__, optopt);
-                       return (BADCH);
-               }
-               else                            /* white space */
-                       optarg = nargv[optind];
-               place = EMSG;
-               ++optind;
-       }
-       return (optopt);                        /* dump back option letter */
+    if (optreset || !*place) {                /* update scanning pointer */
+        optreset = 0;
+        if (optind >= nargc || *(place = nargv[optind]) != '-') {
+            place = EMSG;
+            return (EOF);
+        }
+        if (place[1] && *++place == '-') {    /* found "--" */
+            ++optind;
+            place = EMSG;
+            return (EOF);
+        }
+    }                                         /* option letter okay? */
+    if ((optopt = (int)*place++) == (int)':' ||
+        (oli = strchr(ostr, optopt)) == NULL) {
+        /*
+         * if the user didn't specify '-' as an option,
+         * assume it means EOF.
+         */
+        if (optopt == (int)'-')
+            return (EOF);
+        if (!*place)
+            ++optind;
+        if (opterr && *ostr != ':')
+            (void)fprintf(stderr,
+                "%s: illegal option -- %c\n", __FILE__, optopt);
+        return (BADCH);
+    }
+    if (*++oli != ':') {                      /* don't need argument */
+        optarg = NULL;
+        if (!*place)
+            ++optind;
+    }
+    else {                                    /* need an argument */
+        if (*place)                           /* no white space */
+            optarg = place;
+        else if (nargc <= ++optind) {         /* no arg */
+            place = EMSG;
+            if (*ostr == ':')
+                return (BADARG);
+            if (opterr)
+                (void)fprintf(stderr,
+                    "%s: option requires an argument -- %c\n",
+                    __FILE__, optopt);
+            return (BADCH);
+        }
+         else                                 /* white space */
+            optarg = nargv[optind];
+        place = EMSG;
+        ++optind;
+    }
+    return (optopt);                          /* dump back option letter */
 }