BSD 4_3_Tahoe release
[unix-history] / usr / src / lib / libc / compat-sys5 / getopt.c
index 6905a61..dad7e06 100644 (file)
@@ -1,12 +1,23 @@
 /*
 /*
- * Copyright (c) 1985 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)getopt.c   4.3 (Berkeley) 3/9/86";
-#endif LIBC_SCCS and not lint
+static char sccsid[] = "@(#)getopt.c   4.7 (Berkeley) 6/27/88";
+#endif /* LIBC_SCCS and not lint */
 
 #include <stdio.h>
 
 
 #include <stdio.h>
 
@@ -18,44 +29,56 @@ int opterr = 1,             /* if error message should be printed */
        optopt;                 /* character checked for validity */
 char   *optarg;                /* argument associated with option */
 
        optopt;                 /* character checked for validity */
 char   *optarg;                /* argument associated with option */
 
-#define BADCH  (int)'?'
-#define EMSG   ""
-#define tell(s)        if (opterr) {fputs(*nargv,stderr);fputs(s,stderr); \
-               fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);}
+#define        BADCH   (int)'?'
+#define        EMSG    ""
+#define        tell(s) { \
+       if (opterr) { \
+               fputs(*nargv, stderr); \
+               fputs(s, stderr); \
+               fputc(optopt, stderr); \
+               fputc((int)'\n', stderr); \
+       } \
+       return(BADCH); \
+}
 
 
-getopt(nargc,nargv,ostr)
-int    nargc;
-char   **nargv,
-       *ostr;
+getopt(nargc, nargv, ostr)
+       int nargc;
+       char **nargv, *ostr;
 {
 {
-       static char     *place = EMSG;  /* option letter processing */
-       register char   *oli;           /* option letter list index */
-       char    *index();
+       static char *place = EMSG;              /* option letter processing */
+       register char *oli;                     /* option letter list index */
+       char *index();
 
 
-       if(!*place) {                   /* update scanning pointer */
-               if(optind >= nargc || *(place = nargv[optind]) != '-' || !*++place) return(EOF);
-               if (*place == '-') {    /* found "--" */
+       if (!*place) {                          /* update scanning pointer */
+               if (optind >= nargc || *(place = nargv[optind]) != '-')
+                       return(EOF);
+               if (place[1] && *++place == '-') {      /* found "--" */
                        ++optind;
                        return(EOF);
                }
                        ++optind;
                        return(EOF);
                }
-       }                               /* option letter okay? */
-       if ((optopt = (int)*place++) == (int)':' || !(oli = index(ostr,optopt))) {
-               if(!*place) ++optind;
+       }                                       /* option letter okay? */
+       if ((optopt = (int)*place++) == (int)':' ||
+           !(oli = index(ostr, optopt))) {
+               if (!*place)
+                       ++optind;
                tell(": illegal option -- ");
        }
                tell(": illegal option -- ");
        }
-       if (*++oli != ':') {            /* don't need argument */
+       if (*++oli != ':') {                    /* don't need argument */
                optarg = NULL;
                optarg = NULL;
-               if (!*place) ++optind;
+               if (!*place)
+                       ++optind;
        }
        }
-       else {                          /* need an argument */
-               if (*place) optarg = place;     /* no white space */
+       else {                                  /* need an argument */
+               if (*place)                     /* no white space */
+                       optarg = place;
                else if (nargc <= ++optind) {   /* no arg */
                        place = EMSG;
                        tell(": option requires an argument -- ");
                }
                else if (nargc <= ++optind) {   /* no arg */
                        place = EMSG;
                        tell(": option requires an argument -- ");
                }
-               else optarg = nargv[optind];    /* white space */
+               else                            /* white space */
+                       optarg = nargv[optind];
                place = EMSG;
                ++optind;
        }
                place = EMSG;
                ++optind;
        }
-       return(optopt);                 /* dump back option letter */
+       return(optopt);                         /* dump back option letter */
 }
 }