Mercurial > cpython-lru_cache-weakref
annotate Python/getopt.c @ 44156:fb84bd9500a4
Remove special-casing of integer operations, to stop
using PyInt_CheckExact.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Tue, 04 Dec 2007 20:34:12 +0000 |
| parents | 654c380cf8b9 |
| children | c1fa2e758e05 22a74eaf6b22 |
| 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 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
27 /* Modified to support --help and --version, as well as /? on Windows |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
28 * by Georg Brandl. */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
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 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
15374
diff
changeset
|
33 #ifdef __cplusplus |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
15374
diff
changeset
|
34 extern "C" { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
15374
diff
changeset
|
35 #endif |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
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 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
49 if (_PyOS_optind >= argc) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
50 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
51 #ifdef MS_WINDOWS |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
52 else if (strcmp(argv[_PyOS_optind], "/?") == 0) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
53 ++_PyOS_optind; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
54 return 'h'; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
55 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
56 #endif |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
57 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
58 else if (argv[_PyOS_optind][0] != '-' || |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
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 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
67 else if (strcmp(argv[_PyOS_optind], "--help") == 0) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
68 ++_PyOS_optind; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
69 return 'h'; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
70 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
71 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
72 else if (strcmp(argv[_PyOS_optind], "--version") == 0) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
73 ++_PyOS_optind; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
74 return 'V'; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
75 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
76 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
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; |
|
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
|
83 |
|
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
|
84 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
|
85 if (_PyOS_opterr) |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
86 fprintf(stderr, "Unknown option: -%c\n", option); |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
88 return '_'; |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
89 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
91 if (*(ptr + 1) == ':') { |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
92 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
|
93 _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
|
94 opt_ptr = ""; |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
95 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
97 else { |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
98 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
|
99 if (_PyOS_opterr) |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
100 fprintf(stderr, |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
101 "Argument expected for the -%c option\n", option); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
102 return '_'; |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
103 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
105 _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
|
106 } |
|
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
107 } |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 |
|
1598
ecbadb818847
New version handles -o<string> same as -o <string>
Guido van Rossum <guido@python.org>
parents:
1585
diff
changeset
|
109 return option; |
|
1585
7c75f60468f8
A getopt.c for your amusement
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
15374
diff
changeset
|
111 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
15374
diff
changeset
|
112 #ifdef __cplusplus |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
15374
diff
changeset
|
113 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
15374
diff
changeset
|
114 #endif |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
15374
diff
changeset
|
115 |
