squid-
cache.org
Optimising Web Delivery
Docs
Download
Donate
Support
About
Contact
Shop
Blog
lib
getopt.c
Go to the documentation of this file.
1
/*
2
* Copyright (C) 1996-2023 The Squid Software Foundation and contributors
3
*
4
* Squid software is distributed under GPLv2+ license and includes
5
* contributions from numerous individuals and organizations.
6
* Please see the COPYING and CONTRIBUTORS files for details.
7
*/
8
9
/*
10
* Copyright (c) 1987, 1993, 1994
11
* The Regents of the University of California. All rights reserved.
12
*
13
* Redistribution and use in source and binary forms, with or without
14
* modification, are permitted provided that the following conditions
15
* are met:
16
* 1. Redistributions of source code must retain the above copyright
17
* notice, this list of conditions and the following disclaimer.
18
* 2. Redistributions in binary form must reproduce the above copyright
19
* notice, this list of conditions and the following disclaimer in the
20
* documentation and/or other materials provided with the distribution.
21
* 3. Neither the name of the University nor the names of its contributors
22
* may be used to endorse or promote products derived from this software
23
* without specific prior written permission.
24
*
25
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35
* SUCH DAMAGE.
36
*/
37
38
#include "
squid.h
"
39
40
#if defined(LIBC_SCCS) && !defined(lint)
41
static
char
sccsid[] =
"@(#)getopt.c 8.3 (Berkeley) 4/27/95"
;
42
#endif
/* LIBC_SCCS and not lint */
43
44
#include <stdlib.h>
45
#include <string.h>
46
47
int
opterr
= 1,
/* if error message should be printed */
48
optind
= 1,
/* index into parent argv vector */
49
optopt
,
/* character checked for validity */
50
optreset
;
/* reset getopt */
51
char
*
optarg
;
/* argument associated with option */
52
53
#define BADCH (int)'?'
54
#define BADARG (int)':'
55
#define EMSG (char*)""
56
57
/*
58
* getopt --
59
* Parse argc/argv argument vector.
60
*/
61
int
62
getopt
(nargc, nargv, ostr)
63
int
nargc;
64
char
*
const
*nargv;
65
const
char
*ostr;
66
{
67
static
char
*place =
EMSG
;
/* option letter processing */
68
char
*oli;
/* option letter list index */
69
70
if
(
optreset
|| !*place) {
/* update scanning pointer */
71
optreset
= 0;
72
if
(
optind
>= nargc || *(place = nargv[
optind
]) !=
'-'
) {
73
place =
EMSG
;
74
return
(-1);
75
}
76
if
(place[1] && *++place ==
'-'
) {
/* found "--" */
77
++
optind
;
78
place =
EMSG
;
79
return
(-1);
80
}
81
}
/* option letter okay? */
82
if
((
optopt
= (
int
) *place++) == (
int
)
':'
||
83
!(oli = strchr(ostr,
optopt
))) {
84
/*
85
* if the user didn't specify '-' as an option,
86
* assume it means -1.
87
*/
88
if
(
optopt
== (
int
)
'-'
)
89
return
(-1);
90
if
(!*place)
91
++
optind
;
92
if
(
opterr
&& *ostr !=
':'
)
93
(void) fprintf(stderr,
94
"%s: illegal option -- %c\n"
, __FILE__,
optopt
);
95
return
(
BADCH
);
96
}
97
if
(*++oli !=
':'
) {
/* don't need argument */
98
optarg
=
NULL
;
99
if
(!*place)
100
++
optind
;
101
}
else
{
/* need an argument */
102
if
(*place)
/* no white space */
103
optarg
= place;
104
else
if
(nargc <= ++
optind
) {
/* no arg */
105
place =
EMSG
;
106
if
(*ostr ==
':'
)
107
return
(
BADARG
);
108
if
(
opterr
)
109
(void) fprintf(stderr,
110
"%s: option requires an argument -- %c\n"
,
111
__FILE__,
optopt
);
112
return
(
BADCH
);
113
}
else
/* white space */
114
optarg
= nargv[
optind
];
115
place =
EMSG
;
116
++
optind
;
117
}
118
return
(
optopt
);
/* dump back option letter */
119
}
120
BADCH
#define BADCH
Definition:
getopt.c:53
optopt
int optopt
Definition:
getopt.c:49
optreset
int optreset
Definition:
getopt.c:50
BADARG
#define BADARG
Definition:
getopt.c:54
EMSG
#define EMSG
Definition:
getopt.c:55
getopt
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition:
getopt.c:62
optind
int optind
Definition:
getopt.c:48
optarg
char * optarg
Definition:
getopt.c:51
opterr
int opterr
Definition:
getopt.c:47
squid.h
NULL
#define NULL
Definition:
types.h:145
Introduction
About Squid
Why Squid?
Squid Developers
How to Donate
How to Help Out
Getting Squid
Squid Source Packages
Squid Deployment Case-Studies
Squid Software Foundation
Documentation
Quick Setup
Configuration:
Reference
Examples
FAQ
and
Wiki
Guide Books:
Beginners
Definitive
Non-English
More...
Support
Security Advisories
Bugzilla Database
Mailing lists
Contacting us
Commercial services
Project Sponsors
Squid-based products
Miscellaneous
Developer Resources
Related Writings
Related Software:
Authenticators
Ecap
Icap
Ident
Log Analysis
Monitor
Proxies
Redirectors
General
Squid Artwork
Web Site Translations
Japanese
Mirrors
Website:
gr
il
pl
...
full list
FTP Package Archive