ardour
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
libs
pbd
msvc
getopt.c
Go to the documentation of this file.
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
#ifdef COMPILER_MSVC
35
#include "
pbd/msvc_pbd.h
"
36
#endif
37
#include "
getopt.h
"
38
#include <stdio.h>
39
#include <stdlib.h>
40
#include <string.h>
41
42
#define BADCH (int)'?'
43
#define BADARG (int)':'
44
#define EMSG ""
45
46
__BEGIN_DECLS
// Added by JE - 31-01-2010
47
// All 'GETOPT_API' declarations added by JE - 31-01-2010
48
GETOPT_API
int
opterr
= 1;
/* if error message should be printed */
49
GETOPT_API
int
optind
= 1;
/* index into parent argv vector */
50
GETOPT_API
int
optopt
;
/* character checked for validity */
51
GETOPT_API
int
optreset
;
/* reset getopt */
52
GETOPT_API
char
*
optarg
;
/* argument associated with option */
53
54
/*
55
* getopt --
56
* Parse argc/argv argument vector.
57
*/
58
int
59
getopt
(
int
nargc,
// Argument list ratified by JE - 03-01-2010
60
char
*
const
*nargv,
61
const
char
*ostr)
62
{
63
static
char
*
place
=
EMSG
;
/* option letter processing */
64
char
*oli;
/* option letter list index */
65
66
if
(
optreset
|| !*place) {
/* update scanning pointer */
67
optreset
= 0;
68
if
(
optind
>= nargc || *(place = nargv[
optind
]) !=
'-'
) {
69
place =
EMSG
;
70
return
(-1);
71
}
72
if
(place[1] && *++place ==
'-'
) {
/* found "--" */
73
++
optind
;
74
place =
EMSG
;
75
return
(-1);
76
}
77
}
/* option letter okay? */
78
if
((
optopt
= (
int
)*place++) == (
int
)
':'
||
79
!(oli = (
char
*)strchr(ostr,
optopt
))) {
80
/*
81
* if the user didn't specify '-' as an option,
82
* assume it means -1.
83
*/
84
if
(
optopt
== (
int
)
'-'
)
85
return
(-1);
86
if
(!*place)
87
++
optind
;
88
if
(
opterr
&& *ostr !=
':'
&&
optopt
!=
BADCH
)
89
(void)fprintf(stderr,
"%s: illegal option -- %c\n"
,
90
"progname"
,
optopt
);
91
return
(
BADCH
);
92
}
93
if
(*++oli !=
':'
) {
/* don't need argument */
94
optarg
= NULL;
95
if
(!*place)
96
++
optind
;
97
}
98
else
{
/* need an argument */
99
if
(*place)
/* no white space */
100
optarg
=
place
;
101
else
if
(nargc <= ++
optind
) {
/* no arg */
102
place =
EMSG
;
103
if
(*ostr ==
':'
)
104
return
(
BADARG
);
105
if
(
opterr
)
106
(void)fprintf(stderr,
107
"%s: option requires an argument -- %c\n"
,
108
"progname"
,
optopt
);
109
return
(
BADCH
);
110
}
111
else
/* white space */
112
optarg
= nargv[
optind
];
113
place =
EMSG
;
114
++
optind
;
115
}
116
return
(
optopt
);
/* dump back option letter */
117
}
118
__END_DECLS
// Added by JE - 31-01-2010
GETOPT_API
#define GETOPT_API
Definition:
msvc_pbd.h:57
getopt
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition:
getopt.c:59
optopt
GETOPT_API int optopt
Definition:
getopt.c:50
optreset
GETOPT_API int optreset
Definition:
getopt.c:51
BADARG
#define BADARG
Definition:
getopt.c:43
getopt.h
place
static char * place
Definition:
getopt_long.c:126
opterr
__BEGIN_DECLS GETOPT_API int opterr
Definition:
getopt.c:48
msvc_pbd.h
EMSG
#define EMSG
Definition:
getopt.c:44
BADCH
#define BADCH
Definition:
getopt.c:42
optarg
GETOPT_API char * optarg
Definition:
getopt.c:52
optind
GETOPT_API int optind
Definition:
getopt.c:49
Generated on Sun May 24 2015 12:15:08 for ardour by
1.8.8