8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libbc / libc / gen / common / getopt.c
blob84d33cdc25aba65270c9702404a0cfafa0664e2d
1 /*
2 * Copyright 1989 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
6 /*
7 * Copyright (c) 1987 Regents of the University of California.
8 * All rights reserved.
10 * Redistribution and use in source and binary forms are permitted
11 * provided that the above copyright notice and this paragraph are
12 * duplicated in all such forms and that any documentation,
13 * advertising materials, and other materials related to such
14 * distribution and use acknowledge that the software was developed
15 * by the University of California, Berkeley. The name of the
16 * University may not be used to endorse or promote products derived
17 * from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
20 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
23 #pragma ident "%Z%%M% %I% %E% SMI"
26 /* LINTLIBRARY */
28 #include <stdio.h>
29 #include <string.h>
32 * get option letter from argument vector
34 /* See lib/libc/gen/common/optind.c for next 3 definitions. */
35 extern char *optarg; /* argument associated with option */
36 extern int opterr; /* if error message should be printed */
37 extern int optind; /* index into parent argv vector */
38 int optopt; /* character checked for validity */
41 #define BADCH (int)'?'
42 #define EMSG ""
44 int
45 getopt(int nargc, char **nargv, char *ostr)
47 static char *place = EMSG; /* option letter processing */
48 char *oli; /* option letter list index */
49 char *p;
51 if (!*place) { /* update scanning pointer */
52 if (optind >= nargc || *(place = nargv[optind]) != '-') {
53 place = EMSG;
54 return (EOF);
56 if (place[1] && *++place == '-') { /* found "--" */
57 ++optind;
58 place = EMSG;
59 return (EOF);
61 } /* option letter okay? */
62 if ((optopt = (int)*place++) == (int)':' ||
63 !(oli = strchr(ostr, optopt))) {
66 * For backwards compatibility: don't treat '-' as an
67 * option letter unless caller explicitly asked for it.
69 if (optopt == (int)'-')
70 return (EOF);
71 if (!*place)
72 ++optind;
73 if (opterr) {
74 if (!(p = strrchr(*nargv, '/')))
75 p = *nargv;
76 else
77 ++p;
78 (void)fprintf(stderr, "%s: illegal option -- %c\n",
79 p, optopt);
81 return (BADCH);
83 if (*++oli != ':') { /* don't need argument */
84 optarg = NULL;
85 if (!*place)
86 ++optind;
87 } else { /* need an argument */
88 if (*place) /* no white space */
89 optarg = place;
90 else if (nargc <= ++optind) { /* no arg */
91 place = EMSG;
92 if (!(p = strrchr(*nargv, '/')))
93 p = *nargv;
94 else
95 ++p;
96 if (opterr)
97 (void)fprintf(stderr,
98 "%s: option requires an argument -- %c\n",
99 p, optopt);
100 return (BADCH);
101 } else /* white space */
102 optarg = nargv[optind];
103 place = EMSG;
104 ++optind;
106 return (optopt); /* dump back option letter */