PostgreSQL Source Code
git master
Loading...
Searching...
No Matches
getopt.c
Go to the documentation of this file.
1
/* src/port/getopt.c */
2
3
/*
4
* Copyright (c) 1987, 1993, 1994
5
* The Regents of the University of California. All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
* 3. Neither the name of the University nor the names of its contributors
16
* may be used to endorse or promote products derived from this software
17
* without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
* SUCH DAMAGE.
30
*/
31
32
#include "
c.h
"
33
34
#include "
pg_getopt.h
"
35
#include "
port/pg_getopt_ctx.h
"
36
37
/*
38
* On OpenBSD and some versions of Solaris, opterr and friends are defined in
39
* core libc rather than in a separate getopt module. Define these variables
40
* only if configure found they aren't there by default; otherwise, this
41
* module and its callers will just use libc's variables. (We assume that
42
* testing opterr is sufficient for all of these.)
43
*/
44
#ifndef HAVE_INT_OPTERR
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
char
*
optarg
;
/* argument associated with option */
50
51
#endif
52
53
/*
54
* getopt
55
* Parse argc/argv argument vector.
56
*
57
* We use the re-entrant pg_getopt_start/next() functions under the hood, but
58
* expose the standard non re-entrant API.
59
*
60
* This implementation does not use optreset. Instead, we guarantee that
61
* it can be restarted on a new argv array after a previous call returned -1,
62
* if the caller resets optind to 1 before the first call of the new series.
63
* (Internally, this means we must be sure to reset "active" before
64
* returning -1.)
65
*/
66
int
67
getopt
(
int
nargc,
char
*
const
*nargv,
const
char
*ostr)
68
{
69
static
bool
active =
false
;
70
static
pg_getopt_ctx
ctx;
71
int
result
;
72
73
if
(!active)
74
{
75
pg_getopt_start
(&ctx, nargc, nargv, ostr);
76
ctx.
opterr
=
opterr
;
77
active =
true
;
78
}
79
80
result
=
pg_getopt_next
(&ctx);
81
opterr
= ctx.
opterr
;
82
optind
= ctx.
optind
;
83
optopt
= ctx.
optopt
;
84
optarg
= ctx.
optarg
;
85
if
(
result
== -1)
86
active =
false
;
87
return
result
;
88
}
c.h
result
uint32 result
Definition
checksum_block_internal.h:18
optopt
int optopt
Definition
getopt.c:48
getopt
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition
getopt.c:67
optind
int optind
Definition
getopt.c:47
optarg
char * optarg
Definition
getopt.c:49
opterr
int opterr
Definition
getopt.c:46
pg_getopt.h
pg_getopt_ctx.h
pg_getopt_next
int pg_getopt_next(pg_getopt_ctx *ctx)
Definition
pg_getopt_ctx.c:72
pg_getopt_start
void pg_getopt_start(pg_getopt_ctx *ctx, int nargc, char *const *nargv, const char *ostr)
Definition
pg_getopt_ctx.c:54
pg_getopt_ctx
Definition
pg_getopt_ctx.h:12
pg_getopt_ctx::optind
int optind
Definition
pg_getopt_ctx.h:29
pg_getopt_ctx::optarg
char * optarg
Definition
pg_getopt_ctx.h:28
pg_getopt_ctx::optopt
int optopt
Definition
pg_getopt_ctx.h:30
pg_getopt_ctx::opterr
int opterr
Definition
pg_getopt_ctx.h:22
src
port
getopt.c
Generated on Sat Apr 11 2026 05:13:17 for PostgreSQL Source Code by
1.9.8