Developer Documentation
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
getopt.c
1
/*
2
* Copyright (c) 1987, 1993, 1994
3
* The Regents of the University of California. 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
34
#if defined(LIBC_SCCS) && !defined(lint)
35
static
char
sccsid[] =
"@(#)getopt.c 8.3 (Berkeley) 4/27/95"
;
36
#endif
/* LIBC_SCCS and not lint */
37
38
#include <stdio.h>
39
#include <stdlib.h>
40
#include <string.h>
41
#include "getopt.h"
42
43
OPENMESHDLLEXPORT
int
opterr = 1,
/* if error message should be printed */
44
optind = 1,
/* index into parent argv vector */
45
optopt,
/* character checked for validity */
46
optreset;
/* reset getopt */
47
OPENMESHDLLEXPORT
char
*optarg;
/* argument associated with option */
48
49
#define BADCH (int)'?'
50
#define BADARG (int)':'
51
#define EMSG ""
52
53
/*
54
* getopt --
55
* Parse argc/argv argument vector.
56
*/
57
OPENMESHDLLEXPORT
int
58
getopt(
int
nargc,
char
*
const
*nargv,
const
char
*ostr)
59
{
60
# define __progname nargv[0]
61
static
char
*place = EMSG;
/* option letter processing */
62
char
*oli;
/* option letter list index */
63
64
if
(optreset || !*place) {
/* update scanning pointer */
65
optreset = 0;
66
if
(optind >= nargc || *(place = nargv[optind]) !=
'-'
) {
67
place = EMSG;
68
return
(-1);
69
}
70
if
(place[1] && *++place ==
'-'
) {
/* found "--" */
71
++optind;
72
place = EMSG;
73
return
(-1);
74
}
75
}
/* option letter okay? */
76
if
((optopt = (
int
)*place++) == (
int
)
':'
||
77
!(oli = (
char
*)strchr(ostr, optopt))) {
78
/*
79
* if the user didn't specify '-' as an option,
80
* assume it means -1.
81
*/
82
if
(optopt == (
int
)
'-'
)
83
return
(-1);
84
if
(!*place)
85
++optind;
86
if
(opterr && *ostr !=
':'
)
87
(void)fprintf(stderr,
88
"%s: illegal option -- %c\n"
, __progname, optopt);
89
return
(BADCH);
90
}
91
if
(*++oli !=
':'
) {
/* don't need argument */
92
optarg = NULL;
93
if
(!*place)
94
++optind;
95
}
96
else
{
/* need an argument */
97
if
(*place)
/* no white space */
98
optarg = place;
99
else
if
(nargc <= ++optind) {
/* no arg */
100
place = EMSG;
101
if
(*ostr ==
':'
)
102
return
(BADARG);
103
if
(opterr)
104
(void)fprintf(stderr,
105
"%s: option requires an argument -- %c\n"
,
106
__progname, optopt);
107
return
(BADCH);
108
}
109
else
/* white space */
110
optarg = nargv[optind];
111
place = EMSG;
112
++optind;
113
}
114
return
(optopt);
/* dump back option letter */
115
}
116
libs_required
OpenMesh
src
OpenMesh
Tools
Utils
getopt.c
Generated on Wed Oct 12 2016 12:27:47 for Developer Documentation by
1.8.11