X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/95f51977ddc18faa2e212f30c00a39540b39f325..ca67e7b465996afb3821d6a075c4dc6a7f0f5d52:/usr/src/lib/libc/compat-sys5/getopt.c diff --git a/usr/src/lib/libc/compat-sys5/getopt.c b/usr/src/lib/libc/compat-sys5/getopt.c index 6905a61783..dad7e066ec 100644 --- a/usr/src/lib/libc/compat-sys5/getopt.c +++ b/usr/src/lib/libc/compat-sys5/getopt.c @@ -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) -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 @@ -18,44 +29,56 @@ int opterr = 1, /* if error message should be printed */ 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); } - } /* 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 -- "); } - if (*++oli != ':') { /* don't need argument */ + if (*++oli != ':') { /* don't need argument */ 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 optarg = nargv[optind]; /* white space */ + else /* white space */ + optarg = nargv[optind]; place = EMSG; ++optind; } - return(optopt); /* dump back option letter */ + return(optopt); /* dump back option letter */ }