ReactOS  0.4.12-dev-14-gd0c8636
getopt.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 1987 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  * must display the following acknowledgement:
15  * This product includes software developed by the University of
16  * California, Berkeley and its contributors.
17  * 4. Neither the name of the University nor the names of its contributors
18  * may be used to endorse or promote products derived from this software
19  * without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  *
33  * Fri Jun 13 10:39:00 1997, tfelix@fred.net:
34  * Ported to Win32, changed index/rindex to strchr/strrchr
35  */
36 
37 #include "precomp.h"
38 
39 #if defined(LIBC_SCCS) && !defined(lint)
40 static char sccsid[] = "@(#)getopt.c 4.13 (Berkeley) 2/23/91";
41 #endif /* LIBC_SCCS and not lint */
42 
43 /*
44  * get option letter from argument vector
45  */
46 int opterr = 1, /* if error message should be printed */
47  optind = 1, /* index into parent argv vector */
48  optopt; /* character checked for validity */
49 const char *optarg; /* argument associated with option */
50 
51 #define BADCH (int)'?'
52 #define EMSG ""
53 
54 int
55 getopt(int nargc, char * const *nargv, const char *ostr)
56 {
57  static const char *place = EMSG; /* option letter processing */
58  register char *oli; /* option letter list index */
59  char *p;
60 
61  if (!*place) { /* update scanning pointer */
62  if (optind >= nargc || *(place = nargv[optind]) != '-') {
63  place = EMSG;
64  return(EOF);
65  }
66  if (place[1] && *++place == '-') { /* found "--" */
67  ++optind;
68  place = EMSG;
69  return(EOF);
70  }
71  } /* option letter okay? */
72  if ((optopt = (int)*place++) == (int)':' ||
73  !(oli = strchr(ostr, optopt))) {
74  /*
75  * if the user didn't specify '-' as an option,
76  * assume it means EOF.
77  */
78  if (optopt == (int)'-')
79  return(EOF);
80  if (!*place)
81  ++optind;
82  if (opterr) {
83  if (!(p = strrchr(*nargv, '/')))
84  p = *nargv;
85  else
86  ++p;
87  (void)fprintf(stderr, "%s: illegal option -- %c\n",
88  p, optopt);
89  }
90  return(BADCH);
91  }
92  if (*++oli != ':') { /* don't need argument */
93  optarg = NULL;
94  if (!*place)
95  ++optind;
96  }
97  else { /* need an argument */
98  if (*place) /* no white space */
99  optarg = place;
100  else if (nargc <= ++optind) { /* no arg */
101  place = EMSG;
102  if (!(p = strrchr(*nargv, '/')))
103  p = *nargv;
104  else
105  ++p;
106  if (opterr)
108  "%s: option requires an argument -- %c\n",
109  p, optopt);
110  return(BADCH);
111  }
112  else /* white space */
113  optarg = nargv[optind];
114  place = EMSG;
115  ++optind;
116  }
117  return(optopt); /* dump back option letter */
118 }
int optopt
Definition: getopt.c:47
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:47
int optind
Definition: getopt.c:47
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
smooth NULL
Definition: ftsmooth.c:416
#define BADCH
Definition: getopt.c:51
static char * place
Definition: getopt.c:55
static char sccsid[]
Definition: cmds.c:27
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition: getopt.c:55
int opterr
Definition: getopt.c:46
const char * optarg
Definition: getopt.c:49
char * strchr(const char *String, int ch)
Definition: utclib.c:501
#define EOF
Definition: stdio.h:24
FILE * stderr
#define EMSG
Definition: getopt.c:52
GLfloat GLfloat p
Definition: glext.h:8902