Mercurial > cpython-lru_cache-weakref
annotate Python/getopt.c @ 57303:4aa4c19dfaed legacy-trunk
#1757126: fix typo with the cyrillic_asian alias
| author | Philip Jenvey <pjenvey@underboss.org> |
|---|---|
| date | Tue, 17 Nov 2009 02:42:26 +0000 |
| parents | 7c21cc14b94f |
| children | fd25030223b0 |
| rev | line source |
|---|---|
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
1 /*---------------------------------------------------------------------------* |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
2 * <RCS keywords> |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
3 * |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
4 * C++ Library |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
5 * |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
6 * Copyright 1992-1994, David Gottner |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
7 * |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
8 * All Rights Reserved |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
9 * |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
10 * Permission to use, copy, modify, and distribute this software and its |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
11 * documentation for any purpose and without fee is hereby granted, |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
12 * provided that the above copyright notice, this permission notice and |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
13 * the following disclaimer notice appear unmodified in all copies. |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
14 * |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
15 * I DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL I |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
17 * BE LIABLE FOR ANY SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
18 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
19 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
20 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
21 * |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
22 * Nevertheless, I would like to know about bugs in this library or |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
23 * suggestions for improvment. Send bug reports and feedback to |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
24 * davegottner@delphi.com. |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
25 *---------------------------------------------------------------------------*/ |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 |
|
39073
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
27 /* Modified to support --help and --version, as well as /? on Windows |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
28 * by Georg Brandl. */ |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
29 |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 #include <stdio.h> |
|
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 #include <string.h> |
|
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 |
|
37655
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
33 #ifdef __cplusplus |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
34 extern "C" { |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
35 #endif |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
36 |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
37 int _PyOS_opterr = 1; /* generate error messages */ |
|
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
38 int _PyOS_optind = 1; /* index into argv array */ |
|
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
39 char *_PyOS_optarg = NULL; /* optional argument */ |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
41 int _PyOS_GetOpt(int argc, char **argv, char *optstring) |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 { |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
43 static char *opt_ptr = ""; |
|
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
44 char *ptr; |
|
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
45 int option; |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
47 if (*opt_ptr == '\0') { |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
48 |
|
39073
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
49 if (_PyOS_optind >= argc) |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
50 return -1; |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
51 #ifdef MS_WINDOWS |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
52 else if (strcmp(argv[_PyOS_optind], "/?") == 0) { |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
53 ++_PyOS_optind; |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
54 return 'h'; |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
55 } |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
56 #endif |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
57 |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
58 else if (argv[_PyOS_optind][0] != '-' || |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
59 argv[_PyOS_optind][1] == '\0' /* lone dash */ ) |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
60 return -1; |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
62 else if (strcmp(argv[_PyOS_optind], "--") == 0) { |
|
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
63 ++_PyOS_optind; |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
64 return -1; |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
65 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 |
|
39073
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
67 else if (strcmp(argv[_PyOS_optind], "--help") == 0) { |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
68 ++_PyOS_optind; |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
69 return 'h'; |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
70 } |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
71 |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
72 else if (strcmp(argv[_PyOS_optind], "--version") == 0) { |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
73 ++_PyOS_optind; |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
74 return 'V'; |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
75 } |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
76 |
|
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
77 |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
78 opt_ptr = &argv[_PyOS_optind++][1]; |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
79 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 |
|
6364
f39bee3ff22b
Fix a bug in this code that made it do the wrong thing when an option
Guido van Rossum <guido@python.org>
parents:
5313
diff
changeset
|
81 if ( (option = *opt_ptr++) == '\0') |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
82 return -1; |
|
46406
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
83 |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
84 if (option == 'J') { |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
85 fprintf(stderr, "-J is reserved for Jython\n"); |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
86 return '_'; |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
87 } |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
88 |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
89 if (option == 'X') { |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
90 fprintf(stderr, |
|
46435
7c21cc14b94f
Improve -X error message.
Georg Brandl <georg@python.org>
parents:
46406
diff
changeset
|
91 "-X is reserved for implementation-specific arguments\n"); |
|
46406
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
92 return '_'; |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
93 } |
|
c1fa2e758e05
Applied patch #2617 from Frank Wierzbicki wit some extras from me
Christian Heimes <christian@cheimes.de>
parents:
39073
diff
changeset
|
94 |
|
6364
f39bee3ff22b
Fix a bug in this code that made it do the wrong thing when an option
Guido van Rossum <guido@python.org>
parents:
5313
diff
changeset
|
95 if ((ptr = strchr(optstring, option)) == NULL) { |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
96 if (_PyOS_opterr) |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
97 fprintf(stderr, "Unknown option: -%c\n", option); |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 |
|
39073
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
99 return '_'; |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
100 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
102 if (*(ptr + 1) == ':') { |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
103 if (*opt_ptr != '\0') { |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
104 _PyOS_optarg = opt_ptr; |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
105 opt_ptr = ""; |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
106 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
108 else { |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
109 if (_PyOS_optind >= argc) { |
|
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
110 if (_PyOS_opterr) |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
111 fprintf(stderr, |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
112 "Argument expected for the -%c option\n", option); |
|
39073
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
37655
diff
changeset
|
113 return '_'; |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
114 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
116 _PyOS_optarg = argv[_PyOS_optind++]; |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
117 } |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
118 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
119 |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
120 return option; |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 } |
|
37655
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
122 |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
123 #ifdef __cplusplus |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
124 } |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
125 #endif |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
15374
diff
changeset
|
126 |
