use __progname instead of argv[0] for error messages
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Sun, 3 Apr 1994 00:01:34 +0000 (16:01 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Sun, 3 Apr 1994 00:01:34 +0000 (16:01 -0800)
SCCS-vsn: lib/libc/stdlib/getopt.c 8.2

usr/src/lib/libc/stdlib/getopt.c

index e41f2e5..fdc37c9 100644 (file)
@@ -1,21 +1,18 @@
 /*
 /*
- * Copyright (c) 1987, 1993
+ * Copyright (c) 1987, 1993, 1994
  *     The Regents of the University of California.  All rights reserved.
  *
  * %sccs.include.redist.c%
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
  *     The Regents of the University of California.  All rights reserved.
  *
  * %sccs.include.redist.c%
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getopt.c   8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)getopt.c   8.2 (Berkeley) %G%";
 #endif /* LIBC_SCCS and not lint */
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #endif /* LIBC_SCCS and not lint */
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
-/*
- * get option letter from argument vector
- */
 int    opterr = 1,             /* if error message should be printed */
        optind = 1,             /* index into parent argv vector */
        optopt,                 /* character checked for validity */
 int    opterr = 1,             /* if error message should be printed */
        optind = 1,             /* index into parent argv vector */
        optopt,                 /* character checked for validity */
@@ -26,47 +23,46 @@ char        *optarg;                /* argument associated with option */
 #define        BADARG  (int)':'
 #define        EMSG    ""
 
 #define        BADARG  (int)':'
 #define        EMSG    ""
 
+/*
+ * getopt --
+ *     Parse argc/argv argument vector.
+ */
 int
 getopt(nargc, nargv, ostr)
        int nargc;
        char * const *nargv;
        const char *ostr;
 {
 int
 getopt(nargc, nargv, ostr)
        int nargc;
        char * const *nargv;
        const char *ostr;
 {
+       extern char *__progname;
        static char *place = EMSG;              /* option letter processing */
        static char *place = EMSG;              /* option letter processing */
-       register char *oli;                     /* option letter list index */
-       char *p;
+       char *oli;                              /* option letter list index */
 
        if (optreset || !*place) {              /* update scanning pointer */
                optreset = 0;
                if (optind >= nargc || *(place = nargv[optind]) != '-') {
                        place = EMSG;
 
        if (optreset || !*place) {              /* update scanning pointer */
                optreset = 0;
                if (optind >= nargc || *(place = nargv[optind]) != '-') {
                        place = EMSG;
-                       return(EOF);
+                       return (EOF);
                }
                if (place[1] && *++place == '-') {      /* found "--" */
                        ++optind;
                        place = EMSG;
                }
                if (place[1] && *++place == '-') {      /* found "--" */
                        ++optind;
                        place = EMSG;
-                       return(EOF);
+                       return (EOF);
                }
        }                                       /* option letter okay? */
        if ((optopt = (int)*place++) == (int)':' ||
                }
        }                                       /* option letter okay? */
        if ((optopt = (int)*place++) == (int)':' ||
-           !(oli = index(ostr, optopt))) {
+           !(oli = strchr(ostr, optopt))) {
                /*
                 * if the user didn't specify '-' as an option,
                 * assume it means EOF.
                 */
                if (optopt == (int)'-')
                /*
                 * if the user didn't specify '-' as an option,
                 * assume it means EOF.
                 */
                if (optopt == (int)'-')
-                       return(EOF);
+                       return (EOF);
                if (!*place)
                        ++optind;
                if (!*place)
                        ++optind;
-               if (opterr && *ostr != ':') {
-                       if (!(p = rindex(*nargv, '/')))
-                               p = *nargv;
-                       else
-                               ++p;
-                       (void)fprintf(stderr, "%s: illegal option -- %c\n",
-                           p, optopt);
-               }
-               return(BADCH);
+               if (opterr && *ostr != ':')
+                       (void)fprintf(stderr,
+                           "%s: illegal option -- %c\n", __progname, optopt);
+               return (BADCH);
        }
        if (*++oli != ':') {                    /* don't need argument */
                optarg = NULL;
        }
        if (*++oli != ':') {                    /* don't need argument */
                optarg = NULL;
@@ -78,22 +74,18 @@ getopt(nargc, nargv, ostr)
                        optarg = place;
                else if (nargc <= ++optind) {   /* no arg */
                        place = EMSG;
                        optarg = place;
                else if (nargc <= ++optind) {   /* no arg */
                        place = EMSG;
-                       if (!(p = rindex(*nargv, '/')))
-                               p = *nargv;
-                       else
-                               ++p;
                        if (*ostr == ':')
                        if (*ostr == ':')
-                               return(BADARG);
+                               return (BADARG);
                        if (opterr)
                                (void)fprintf(stderr,
                                    "%s: option requires an argument -- %c\n",
                        if (opterr)
                                (void)fprintf(stderr,
                                    "%s: option requires an argument -- %c\n",
-                                   p, optopt);
-                       return(BADCH);
+                                   __progname, optopt);
+                       return (BADCH);
                }
                else                            /* white space */
                        optarg = nargv[optind];
                place = EMSG;
                ++optind;
        }
                }
                else                            /* white space */
                        optarg = nargv[optind];
                place = EMSG;
                ++optind;
        }
-       return(optopt);                         /* dump back option letter */
+       return (optopt);                        /* dump back option letter */
 }
 }