Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/comp/getopt.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#pragma prototyped
23
24
#include <ast.h>
25
26
#undef _lib_getopt /* we can satisfy the api */
27
28
#if _lib_getopt
29
30
NoN(getopt)
31
32
#else
33
34
#undef _BLD_ast /* enable ast imports since we're user static */
35
36
#include <error.h>
37
#include <option.h>
38
39
int opterr = 1;
40
int optind = 1;
41
int optopt = 0;
42
char* optarg = 0;
43
44
static int lastoptind;
45
46
extern int
47
getopt(int argc, char* const* argv, const char* optstring)
48
{
49
int n;
50
51
NoP(argc);
52
opt_info.index = (optind > 1 || optind == lastoptind) ? optind : 0;
53
if (opt_info.index >= argc)
54
return -1;
55
switch (n = optget((char**)argv, optstring))
56
{
57
case ':':
58
n = '?';
59
/*FALLTHROUGH*/
60
case '?':
61
if (opterr && (!optstring || *optstring != ':'))
62
{
63
if (!error_info.id)
64
error_info.id = argv[0];
65
errormsg(NiL, 2, opt_info.arg);
66
}
67
optopt = opt_info.option[1];
68
break;
69
case 0:
70
n = -1;
71
break;
72
}
73
optarg = opt_info.arg;
74
lastoptind = optind = opt_info.index;
75
return n;
76
}
77
78
#endif
79
80