1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
/* $Id$
* Redistribution and use of this code in source and binary forms, with or
* without modification, are freely permitted. [Kiyoshi Matsui]
*/
/*
* L I B . C
* L i b r a r y R o u t i n e s
*
* Some variation of standard library functions.
* Some standard functions for the library which has not those or the library
* which has only non-conforming ones.
*/
#if HAVE_CONFIG_H
#include "configed.H"
#else
#include "noconfig.H"
#endif
#if NEED_GETOPT
#include "system.H"
#include "internal.H"
/*
* Note: The getopt() of glibc should not be used since the specification
* differs from the standard one.
* Use this getopt() for this cpp.
*/
/* Based on the public-domain-software released by AT&T. */
#define OPTERR( s, c) if (opterr) { \
mcpp_fputs( argv[0], ERR); \
mcpp_fputs( s, ERR); \
mcpp_fputc( c, ERR); \
mcpp_fputc( '\n', ERR); \
}
int optind = 1;
int opterr = 1;
int optopt;
char * optarg;
#if MCPP_LIB
void init_lib( void)
{
optind = 1;
opterr = 1;
}
#endif
//FUZZ: disable check_for_lack_ACE_OS
int getopt(
int argc,
char * const * argv,
const char * opts
)
//FUZZ: enable check_for_lack_ACE_OS
/*
* Get the next option (and it's argument) from the command line.
*/
{
const char * const error1 = ": option requires an argument --";
const char * const error2 = ": illegal option --";
static int sp = 1;
int c;
const char * cp;
if (sp == 1) {
if (argc <= optind ||
argv[ optind][ 0] != '-' || argv[ optind][ 1] == '\0') {
return EOF;
} else if (ACE_OS::strcmp( argv[ optind], "--") == 0) {
optind++;
return EOF;
}
}
/* optopt = c = (unsigned char) argv[ optind][ sp]; */
optopt = c = argv[ optind][ sp] & UCHARMAX;
if (c == ':' || (cp = ACE_OS::strchr( opts, c)) == 0) {
OPTERR( error2, c)
if (argv[ optind][ ++sp] == '\0') {
optind++;
sp = 1;
}
return '?';
}
if (*++cp == ':') {
if (argv[ optind][ sp+1] != '\0') {
optarg = &argv[ optind++][ sp+1];
} else if (argc <= ++optind) {
OPTERR( error1, c)
sp = 1;
return '?';
} else {
optarg = argv[ optind++];
}
sp = 1;
} else {
if (argv[ optind][ ++sp] == '\0') {
sp = 1;
optind++;
}
optarg = 0;
}
return c;
}
#endif
#if ! HOST_HAVE_STPCPY
char * mcpp_stpcpy(
char * dest,
const char * src
)
/*
* Copy the string and return the advanced pointer.
*/
{
const char * s;
char * d;
for (s = src, d = dest; (*d++ = *s++) != '\0'; )
;
return d - 1;
}
#endif
|