grpc
third_party
cares
cares
src
tools
ares_getopt.c
Go to the documentation of this file.
1
/*
2
* Original file name getopt.c Initial import into the c-ares source tree
3
* on 2007-04-11. Lifted from version 5.2 of the 'Open Mash' project with
4
* the modified BSD license, BSD license without the advertising clause.
5
*
6
*/
7
8
/*
9
* getopt.c --
10
*
11
* Standard UNIX getopt function. Code is from BSD.
12
*
13
* Copyright (c) 1987-2001 The Regents of the University of California.
14
* All rights reserved.
15
*
16
* Redistribution and use in source and binary forms, with or without
17
* modification, are permitted provided that the following conditions are met:
18
*
19
* A. Redistributions of source code must retain the above copyright notice,
20
* this list of conditions and the following disclaimer.
21
* B. Redistributions in binary form must reproduce the above copyright notice,
22
* this list of conditions and the following disclaimer in the documentation
23
* and/or other materials provided with the distribution.
24
* C. Neither the names of the copyright holders nor the names of its
25
* contributors may be used to endorse or promote products derived from this
26
* software without specific prior written permission.
27
*
28
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
29
* IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
30
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
32
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38
* POSSIBILITY OF SUCH DAMAGE.
39
*/
40
41
/* #if !defined(lint)
42
* static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
43
* #endif
44
*/
45
46
#include <stdio.h>
47
#include <stdlib.h>
48
#include <
string.h
>
49
#include "
ares_getopt.h
"
50
51
int
opterr
= 1,
/* if error message should be printed */
52
optind
= 1;
/* index into parent argv vector */
53
int
optopt
= 0;
/* character checked for validity */
54
static
int
optreset
;
/* reset getopt */
55
char
*
optarg
;
/* argument associated with option */
56
57
#define BADCH (int)'?'
58
#define BADARG (int)':'
59
#define EMSG (char *)""
60
61
/*
62
* ares_getopt --
63
* Parse argc/argv argument vector.
64
*/
65
int
66
ares_getopt
(
int
nargc,
char
*
const
nargv[],
const
char
*ostr)
67
{
68
static
char
*place =
EMSG
;
/* option letter processing */
69
char
*oli;
/* option letter list index */
70
71
if
(
optreset
|| !*place) {
/* update scanning pointer */
72
optreset
= 0;
73
if
(
optind
>= nargc || *(place = nargv[
optind
]) !=
'-'
) {
74
place =
EMSG
;
75
return
(EOF);
76
}
77
if
(place[1] && *++place ==
'-'
) {
/* found "--" */
78
++
optind
;
79
place =
EMSG
;
80
return
(EOF);
81
}
82
}
/* option letter okay? */
83
if
((
optopt
= (
int
)*place++) == (
int
)
':'
||
84
(oli = strchr(ostr,
optopt
)) == NULL) {
85
/*
86
* if the user didn't specify '-' as an option,
87
* assume it means EOF.
88
*/
89
if
(
optopt
== (
int
)
'-'
)
90
return
(EOF);
91
if
(!*place)
92
++
optind
;
93
if
(
opterr
&& *ostr !=
':'
)
94
(void)fprintf(
stderr
,
95
"%s: illegal option -- %c\n"
, __FILE__,
optopt
);
96
return
(
BADCH
);
97
}
98
if
(*++oli !=
':'
) {
/* don't need argument */
99
optarg
= NULL;
100
if
(!*place)
101
++
optind
;
102
}
103
else
{
/* need an argument */
104
if
(*place)
/* no white space */
105
optarg
= place;
106
else
if
(nargc <= ++
optind
) {
/* no arg */
107
place =
EMSG
;
108
if
(*ostr ==
':'
)
109
return
(
BADARG
);
110
if
(
opterr
)
111
(void)fprintf(
stderr
,
112
"%s: option requires an argument -- %c\n"
,
113
__FILE__,
optopt
);
114
return
(
BADCH
);
115
}
116
else
/* white space */
117
optarg
= nargv[
optind
];
118
place =
EMSG
;
119
++
optind
;
120
}
121
return
(
optopt
);
/* dump back option letter */
122
}
optopt
int optopt
Definition:
ares_getopt.c:53
opterr
int opterr
Definition:
ares_getopt.c:51
string.h
EMSG
#define EMSG
Definition:
ares_getopt.c:59
ares_getopt.h
python_utils.port_server.stderr
stderr
Definition:
port_server.py:51
optind
int optind
Definition:
ares_getopt.c:52
BADARG
#define BADARG
Definition:
ares_getopt.c:58
ares_getopt
int ares_getopt(int nargc, char *const nargv[], const char *ostr)
Definition:
ares_getopt.c:66
optreset
static int optreset
Definition:
ares_getopt.c:54
optarg
char * optarg
Definition:
ares_getopt.c:55
BADCH
#define BADCH
Definition:
ares_getopt.c:57
grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:43