Skip to content

Commit 7ec6273

Browse files
evanlucasandrewdeandrade
authored andcommitted
src: add getopt option parser
Options have been moved into the NodeOptions class. A new global, node_options now exists and is used to access the options after the command line arguments have been parsed. PR-URL: nodejs/node#1804 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
1 parent 629fdc8 commit 7ec6273

12 files changed

+1228
-48
lines changed

deps/getopt/getopt.gyp

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
'targets': [
3+
{
4+
'target_name': 'getopt',
5+
'type': 'static_library',
6+
'sources': [
7+
'getopt.h',
8+
'getopt_long.c'
9+
],
10+
'defines': [
11+
'REPLACE_GETOPT'
12+
]
13+
}
14+
]
15+
}

deps/getopt/getopt.h

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/* $NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $ */
2+
/* $FreeBSD$ */
3+
4+
/*-
5+
* Copyright (c) 2000 The NetBSD Foundation, Inc.
6+
* All rights reserved.
7+
*
8+
* This code is derived from software contributed to The NetBSD Foundation
9+
* by Dieter Baron and Thomas Klausner.
10+
*
11+
* Redistribution and use in source and binary forms, with or without
12+
* modification, are permitted provided that the following conditions
13+
* are met:
14+
* 1. Redistributions of source code must retain the above copyright
15+
* notice, this list of conditions and the following disclaimer.
16+
* 2. Redistributions in binary form must reproduce the above copyright
17+
* notice, this list of conditions and the following disclaimer in the
18+
* documentation and/or other materials provided with the distribution.
19+
*
20+
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21+
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24+
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30+
* POSSIBILITY OF SUCH DAMAGE.
31+
*/
32+
33+
#ifndef _GETOPT_H_
34+
#define _GETOPT_H_
35+
36+
#ifndef __BEGIN_DECLS
37+
#ifdef __cplusplus
38+
#define __BEGIN_DECLS extern "C" {
39+
#define __END_DECLS }
40+
#else
41+
#define __BEGIN_DECLS
42+
#define __END_DECLS
43+
#endif /* __cplusplus */
44+
#endif /* __BEGIN_DECLS */
45+
46+
#ifdef WIN32
47+
#ifdef _MSC_VER
48+
/* ignore MSVC++ warnings that are annoying and hard to remove:
49+
4702 unreachable code
50+
(there is an unreachable assert(0) in case somehow it is reached)
51+
*/
52+
#pragma warning( disable : 4702 )
53+
#endif
54+
55+
#endif /* WIN32 */
56+
57+
/*
58+
* GNU-like getopt_long()/getopt_long_only() with 4.4BSD optreset extension.
59+
* getopt() is declared here too for GNU programs.
60+
*/
61+
#define no_argument 0
62+
#define required_argument 1
63+
#define optional_argument 2
64+
65+
struct option {
66+
/* name of long option */
67+
const char *name;
68+
/*
69+
* one of no_argument, required_argument, and optional_argument:
70+
* whether option takes an argument
71+
*/
72+
int has_arg;
73+
/* if not NULL, set *flag to val when option found */
74+
int *flag;
75+
/* if flag not NULL, value to set *flag to; else return value */
76+
int val;
77+
78+
/* add description for usage */
79+
const char *desc;
80+
};
81+
82+
__BEGIN_DECLS
83+
extern int getopt_long(int, char * const *, const char *,
84+
const struct option *, int *);
85+
extern int getopt_long_only(int, char * const *, const char *,
86+
const struct option *, int *);
87+
#ifndef _GETOPT_DECLARED
88+
#define _GETOPT_DECLARED
89+
int getopt(int, char * const [], const char *);
90+
91+
extern char *optarg; /* getopt(3) external variables */
92+
extern int optind, opterr, optopt;
93+
#endif
94+
#ifndef _OPTRESET_DECLARED
95+
#define _OPTRESET_DECLARED
96+
extern int optreset; /* getopt(3) external variable */
97+
#endif
98+
__END_DECLS
99+
100+
#endif /* !_GETOPT_H_ */

0 commit comments

Comments
 (0)