Mercurial > emacs
annotate lib-src/getopt.c @ 24841:d2d412758428
(clear_cached_bitmap_slots): Remove.
(get_bitmap_with_cache): Check if CreateBitmap failed.
Adjust cache size dynamically so cache is never larger than the
system limit of GDI resources.
Do cache clearing inline. Move global variables to local scope.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Sun, 13 Jun 1999 17:49:12 +0000 |
parents | 84e894dcafbb |
children | 1a697e2604c3 |
rev | line source |
---|---|
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1 /* Getopt for GNU. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
2 NOTE: getopt is now part of the C library, so if you don't know what |
21501
c8c409640bf3
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20390
diff
changeset
|
3 "Keep this file name-space clean" means, talk to drepper@gnu.org |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
4 before changing it! |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
5 |
21501
c8c409640bf3
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20390
diff
changeset
|
6 Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
7 Free Software Foundation, Inc. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
8 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
9 NOTE: The canonical source of this file is maintained with the GNU C Library. |
21794
1a370f7cc0c1
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21793
diff
changeset
|
10 Bugs can be reported to bug-glibc@gnu.org. |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
11 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
12 This program is free software; you can redistribute it and/or modify it |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
13 under the terms of the GNU General Public License as published by the |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
14 Free Software Foundation; either version 2, or (at your option) any |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
15 later version. |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
16 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
17 This program is distributed in the hope that it will be useful, |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
18 but WITHOUT ANY WARRANTY; without even the implied warranty of |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
20 GNU General Public License for more details. |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
21 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
22 You should have received a copy of the GNU General Public License |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
23 along with this program; if not, write to the Free Software |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
24 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
19874
diff
changeset
|
25 USA. */ |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
26 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
27 /* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
28 Ditto for AIX 3.2 and <stdlib.h>. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
29 #ifndef _NO_PROTO |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
30 # define _NO_PROTO |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
31 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
32 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
33 #ifdef HAVE_CONFIG_H |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
34 # include <config.h> |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
35 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
36 |
21501
c8c409640bf3
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20390
diff
changeset
|
37 #if !defined __STDC__ || !__STDC__ |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
38 /* This is a separate conditional since some stdc systems |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
39 reject `defined (const)'. */ |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
40 # ifndef const |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
41 # define const |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
42 # endif |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
43 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
44 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
45 #include <stdio.h> |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
46 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
47 /* Comment out all this code if we are using the GNU C Library, and are not |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
48 actually compiling the library itself. This code is part of the GNU C |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
49 Library, but also included in many other GNU distributions. Compiling |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
50 and linking in this code is a waste when using the GNU C library |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
51 (especially if it is a shared library). Rather than having every GNU |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
52 program understand `configure --with-gnu-libc' and omit the object files, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
53 it is simpler to just do this in the source for each such file. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
54 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
55 #define GETOPT_INTERFACE_VERSION 2 |
21501
c8c409640bf3
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20390
diff
changeset
|
56 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
57 # include <gnu-versions.h> |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
58 # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
59 # define ELIDE_CODE |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
60 # endif |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
61 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
62 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
63 #ifndef ELIDE_CODE |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
64 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
65 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
66 /* This needs to come after some library #include |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
67 to get __GNU_LIBRARY__ defined. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
68 #ifdef __GNU_LIBRARY__ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
69 /* Don't include stdlib.h for non-GNU C libraries because some of them |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
70 contain conflicting prototypes for getopt. */ |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
71 # include <stdlib.h> |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
72 # include <unistd.h> |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
73 #endif /* GNU C library. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
74 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
75 #ifdef VMS |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
76 # include <unixlib.h> |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
77 # if HAVE_STRING_H - 0 |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
78 # include <string.h> |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
79 # endif |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
80 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
81 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
82 #ifndef _ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
83 /* This is for other GNU distributions with internationalized messages. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
84 When compiling libc, the _ macro is predefined. */ |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
85 # ifdef HAVE_LIBINTL_H |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
86 # include <libintl.h> |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
87 # define _(msgid) gettext (msgid) |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
88 # else |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
89 # define _(msgid) (msgid) |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
90 # endif |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
91 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
92 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
93 /* This version of `getopt' appears to the caller like standard Unix `getopt' |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
94 but it behaves differently for the user, since it allows the user |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
95 to intersperse the options with the other arguments. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
96 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
97 As `getopt' works, it permutes the elements of ARGV so that, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
98 when it is done, all the options precede everything else. Thus |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
99 all application programs are extended to handle flexible argument order. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
100 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
101 Setting the environment variable POSIXLY_CORRECT disables permutation. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
102 Then the behavior is completely standard. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
103 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
104 GNU application programs can use a third alternative mode in which |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
105 they can distinguish the relative order of options and other arguments. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
106 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
107 #include "getopt.h" |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
108 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
109 /* For communication from `getopt' to the caller. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
110 When `getopt' finds an option that takes an argument, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
111 the argument value is returned here. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
112 Also, when `ordering' is RETURN_IN_ORDER, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
113 each non-option ARGV-element is returned here. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
114 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
115 char *optarg = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
116 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
117 /* Index in ARGV of the next element to be scanned. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
118 This is used for communication to and from the caller |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
119 and for communication between successive calls to `getopt'. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
120 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
121 On entry to `getopt', zero means this is the first call; initialize. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
122 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
123 When `getopt' returns -1, this is the index of the first of the |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
124 non-option elements that the caller should itself scan. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
125 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
126 Otherwise, `optind' communicates from one call to the next |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
127 how much of ARGV has been scanned so far. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
128 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
129 /* 1003.2 says this must be 1 before any call. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
130 int optind = 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
131 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
132 /* Formerly, initialization of getopt depended on optind==0, which |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
133 causes problems with re-calling getopt as programs generally don't |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
134 know that. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
135 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
136 int __getopt_initialized = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
137 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
138 /* The next char to be scanned in the option-element |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
139 in which the last option character we returned was found. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
140 This allows us to pick up the scan where we left off. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
141 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
142 If this is zero, or a null string, it means resume the scan |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
143 by advancing to the next ARGV-element. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
144 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
145 static char *nextchar; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
146 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
147 /* Callers store zero here to inhibit the error message |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
148 for unrecognized options. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
149 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
150 int opterr = 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
151 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
152 /* Set to an option character which was unrecognized. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
153 This must be initialized on some systems to avoid linking in the |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
154 system's own getopt implementation. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
155 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
156 int optopt = '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
157 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
158 /* Describe how to deal with options that follow non-option ARGV-elements. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
159 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
160 If the caller did not specify anything, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
161 the default is REQUIRE_ORDER if the environment variable |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
162 POSIXLY_CORRECT is defined, PERMUTE otherwise. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
163 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
164 REQUIRE_ORDER means don't recognize them as options; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
165 stop option processing when the first non-option is seen. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
166 This is what Unix does. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
167 This mode of operation is selected by either setting the environment |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
168 variable POSIXLY_CORRECT, or using `+' as the first character |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
169 of the list of option characters. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
170 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
171 PERMUTE is the default. We permute the contents of ARGV as we scan, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
172 so that eventually all the non-options are at the end. This allows options |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
173 to be given in any order, even with programs that were not written to |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
174 expect this. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
175 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
176 RETURN_IN_ORDER is an option available to programs that were written |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
177 to expect options and other ARGV-elements in any order and that care about |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
178 the ordering of the two. We describe each non-option ARGV-element |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
179 as if it were the argument of an option with character code 1. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
180 Using `-' as the first character of the list of option characters |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
181 selects this mode of operation. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
182 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
183 The special argument `--' forces an end of option-scanning regardless |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
184 of the value of `ordering'. In the case of RETURN_IN_ORDER, only |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
185 `--' can cause `getopt' to return -1 with `optind' != ARGC. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
186 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
187 static enum |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
188 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
189 REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
190 } ordering; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
191 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
192 /* Value of POSIXLY_CORRECT environment variable. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
193 static char *posixly_correct; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
194 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
195 #ifdef __GNU_LIBRARY__ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
196 /* We want to avoid inclusion of string.h with non-GNU libraries |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
197 because there are many ways it can cause trouble. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
198 On some systems, it contains special magic macros that don't work |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
199 in GCC. */ |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
200 # include <string.h> |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
201 # define my_index strchr |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
202 #else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
203 |
22146
84e894dcafbb
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21794
diff
changeset
|
204 # if HAVE_STRING_H |
84e894dcafbb
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21794
diff
changeset
|
205 # include <string.h> |
84e894dcafbb
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21794
diff
changeset
|
206 # else |
84e894dcafbb
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21794
diff
changeset
|
207 # include <strings.h> |
84e894dcafbb
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21794
diff
changeset
|
208 # endif |
84e894dcafbb
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21794
diff
changeset
|
209 |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
210 /* Avoid depending on library functions or files |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
211 whose names are inconsistent. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
212 |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
213 #ifndef getenv |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
214 extern char *getenv (); |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
215 #endif |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
216 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
217 static char * |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
218 my_index (str, chr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
219 const char *str; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
220 int chr; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
221 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
222 while (*str) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
223 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
224 if (*str == chr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
225 return (char *) str; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
226 str++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
227 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
228 return 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
229 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
230 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
231 /* If using GCC, we can safely declare strlen this way. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
232 If not using GCC, it is ok not to declare it. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
233 #ifdef __GNUC__ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
234 /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
235 That was relevant to code that was here before. */ |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
236 # if (!defined __STDC__ || !__STDC__) && !defined strlen |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
237 /* gcc with -traditional declares the built-in strlen to return int, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
238 and has done so at least since version 2.4.5. -- rms. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
239 extern int strlen (const char *); |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
240 # endif /* not __STDC__ */ |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
241 #endif /* __GNUC__ */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
242 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
243 #endif /* not __GNU_LIBRARY__ */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
244 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
245 /* Handle permutation of arguments. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
246 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
247 /* Describe the part of ARGV that contains non-options that have |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
248 been skipped. `first_nonopt' is the index in ARGV of the first of them; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
249 `last_nonopt' is the index after the last of them. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
250 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
251 static int first_nonopt; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
252 static int last_nonopt; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
253 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
254 #ifdef _LIBC |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
255 /* Bash 2.0 gives us an environment variable containing flags |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
256 indicating ARGV elements that should not be considered arguments. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
257 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
258 /* Defined in getopt_init.c */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
259 extern char *__getopt_nonoption_flags; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
260 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
261 static int nonoption_flags_max_len; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
262 static int nonoption_flags_len; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
263 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
264 static int original_argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
265 static char *const *original_argv; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
266 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
267 /* Make sure the environment variable bash 2.0 puts in the environment |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
268 is valid for the getopt call we must make sure that the ARGV passed |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
269 to getopt is that one passed to the process. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
270 static void |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
271 __attribute__ ((unused)) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
272 store_args_and_env (int argc, char *const *argv) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
273 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
274 /* XXX This is no good solution. We should rather copy the args so |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
275 that we can compare them later. But we must not use malloc(3). */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
276 original_argc = argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
277 original_argv = argv; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
278 } |
19872
f63ca294822b
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
19767
diff
changeset
|
279 # ifdef text_set_element |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
280 text_set_element (__libc_subinit, store_args_and_env); |
19872
f63ca294822b
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
19767
diff
changeset
|
281 # endif /* text_set_element */ |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
282 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
283 # define SWAP_FLAGS(ch1, ch2) \ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
284 if (nonoption_flags_len > 0) \ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
285 { \ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
286 char __tmp = __getopt_nonoption_flags[ch1]; \ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
287 __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
288 __getopt_nonoption_flags[ch2] = __tmp; \ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
289 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
290 #else /* !_LIBC */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
291 # define SWAP_FLAGS(ch1, ch2) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
292 #endif /* _LIBC */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
293 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
294 /* Exchange two adjacent subsequences of ARGV. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
295 One subsequence is elements [first_nonopt,last_nonopt) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
296 which contains all the non-options that have been skipped so far. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
297 The other is elements [last_nonopt,optind), which contains all |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
298 the options processed since those non-options were skipped. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
299 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
300 `first_nonopt' and `last_nonopt' are relocated so that they describe |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
301 the new indices of the non-options in ARGV after they are moved. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
302 |
21501
c8c409640bf3
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20390
diff
changeset
|
303 #if defined __STDC__ && __STDC__ |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
304 static void exchange (char **); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
305 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
306 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
307 static void |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
308 exchange (argv) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
309 char **argv; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
310 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
311 int bottom = first_nonopt; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
312 int middle = last_nonopt; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
313 int top = optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
314 char *tem; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
315 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
316 /* Exchange the shorter segment with the far end of the longer segment. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
317 That puts the shorter segment into the right place. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
318 It leaves the longer segment in the right place overall, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
319 but it consists of two parts that need to be swapped next. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
320 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
321 #ifdef _LIBC |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
322 /* First make sure the handling of the `__getopt_nonoption_flags' |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
323 string can work normally. Our top argument must be in the range |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
324 of the string. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
325 if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
326 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
327 /* We must extend the array. The user plays games with us and |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
328 presents new arguments. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
329 char *new_str = malloc (top + 1); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
330 if (new_str == NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
331 nonoption_flags_len = nonoption_flags_max_len = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
332 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
333 { |
20212
90f407354bdf
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
19875
diff
changeset
|
334 memset (__mempcpy (new_str, __getopt_nonoption_flags, |
90f407354bdf
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
19875
diff
changeset
|
335 nonoption_flags_max_len), |
90f407354bdf
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
19875
diff
changeset
|
336 '\0', top + 1 - nonoption_flags_max_len); |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
337 nonoption_flags_max_len = top + 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
338 __getopt_nonoption_flags = new_str; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
339 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
340 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
341 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
342 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
343 while (top > middle && middle > bottom) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
344 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
345 if (top - middle > middle - bottom) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
346 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
347 /* Bottom segment is the short one. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
348 int len = middle - bottom; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
349 register int i; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
350 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
351 /* Swap it with the top part of the top segment. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
352 for (i = 0; i < len; i++) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
353 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
354 tem = argv[bottom + i]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
355 argv[bottom + i] = argv[top - (middle - bottom) + i]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
356 argv[top - (middle - bottom) + i] = tem; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
357 SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
358 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
359 /* Exclude the moved bottom segment from further swapping. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
360 top -= len; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
361 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
362 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
363 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
364 /* Top segment is the short one. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
365 int len = top - middle; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
366 register int i; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
367 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
368 /* Swap it with the bottom part of the bottom segment. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
369 for (i = 0; i < len; i++) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
370 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
371 tem = argv[bottom + i]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
372 argv[bottom + i] = argv[middle + i]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
373 argv[middle + i] = tem; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
374 SWAP_FLAGS (bottom + i, middle + i); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
375 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
376 /* Exclude the moved top segment from further swapping. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
377 bottom += len; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
378 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
379 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
380 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
381 /* Update records for the slots the non-options now occupy. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
382 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
383 first_nonopt += (optind - last_nonopt); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
384 last_nonopt = optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
385 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
386 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
387 /* Initialize the internal data when the first call is made. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
388 |
21501
c8c409640bf3
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20390
diff
changeset
|
389 #if defined __STDC__ && __STDC__ |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
390 static const char *_getopt_initialize (int, char *const *, const char *); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
391 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
392 static const char * |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
393 _getopt_initialize (argc, argv, optstring) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
394 int argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
395 char *const *argv; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
396 const char *optstring; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
397 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
398 /* Start processing options with ARGV-element 1 (since ARGV-element 0 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
399 is the program name); the sequence of previously skipped |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
400 non-option ARGV-elements is empty. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
401 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
402 first_nonopt = last_nonopt = optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
403 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
404 nextchar = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
405 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
406 posixly_correct = getenv ("POSIXLY_CORRECT"); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
407 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
408 /* Determine how to handle the ordering of options and nonoptions. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
409 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
410 if (optstring[0] == '-') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
411 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
412 ordering = RETURN_IN_ORDER; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
413 ++optstring; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
414 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
415 else if (optstring[0] == '+') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
416 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
417 ordering = REQUIRE_ORDER; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
418 ++optstring; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
419 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
420 else if (posixly_correct != NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
421 ordering = REQUIRE_ORDER; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
422 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
423 ordering = PERMUTE; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
424 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
425 #ifdef _LIBC |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
426 if (posixly_correct == NULL |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
427 && argc == original_argc && argv == original_argv) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
428 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
429 if (nonoption_flags_max_len == 0) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
430 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
431 if (__getopt_nonoption_flags == NULL |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
432 || __getopt_nonoption_flags[0] == '\0') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
433 nonoption_flags_max_len = -1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
434 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
435 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
436 const char *orig_str = __getopt_nonoption_flags; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
437 int len = nonoption_flags_max_len = strlen (orig_str); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
438 if (nonoption_flags_max_len < argc) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
439 nonoption_flags_max_len = argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
440 __getopt_nonoption_flags = |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
441 (char *) malloc (nonoption_flags_max_len); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
442 if (__getopt_nonoption_flags == NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
443 nonoption_flags_max_len = -1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
444 else |
20212
90f407354bdf
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
19875
diff
changeset
|
445 memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), |
90f407354bdf
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
19875
diff
changeset
|
446 '\0', nonoption_flags_max_len - len); |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
447 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
448 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
449 nonoption_flags_len = nonoption_flags_max_len; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
450 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
451 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
452 nonoption_flags_len = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
453 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
454 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
455 return optstring; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
456 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
457 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
458 /* Scan elements of ARGV (whose length is ARGC) for option characters |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
459 given in OPTSTRING. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
460 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
461 If an element of ARGV starts with '-', and is not exactly "-" or "--", |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
462 then it is an option element. The characters of this element |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
463 (aside from the initial '-') are option characters. If `getopt' |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
464 is called repeatedly, it returns successively each of the option characters |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
465 from each of the option elements. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
466 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
467 If `getopt' finds another option character, it returns that character, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
468 updating `optind' and `nextchar' so that the next call to `getopt' can |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
469 resume the scan with the following option character or ARGV-element. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
470 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
471 If there are no more option characters, `getopt' returns -1. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
472 Then `optind' is the index in ARGV of the first ARGV-element |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
473 that is not an option. (The ARGV-elements have been permuted |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
474 so that those that are not options now come last.) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
475 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
476 OPTSTRING is a string containing the legitimate option characters. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
477 If an option character is seen that is not listed in OPTSTRING, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
478 return '?' after printing an error message. If you set `opterr' to |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
479 zero, the error message is suppressed but we still return '?'. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
480 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
481 If a char in OPTSTRING is followed by a colon, that means it wants an arg, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
482 so the following text in the same ARGV-element, or the text of the following |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
483 ARGV-element, is returned in `optarg'. Two colons mean an option that |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
484 wants an optional arg; if there is text in the current ARGV-element, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
485 it is returned in `optarg', otherwise `optarg' is set to zero. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
486 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
487 If OPTSTRING starts with `-' or `+', it requests different methods of |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
488 handling the non-option ARGV-elements. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
489 See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
490 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
491 Long-named options begin with `--' instead of `-'. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
492 Their names may be abbreviated as long as the abbreviation is unique |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
493 or is an exact match for some defined option. If they have an |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
494 argument, it follows the option name in the same ARGV-element, separated |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
495 from the option name by a `=', or else the in next ARGV-element. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
496 When `getopt' finds a long-named option, it returns 0 if that option's |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
497 `flag' field is nonzero, the value of the option's `val' field |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
498 if the `flag' field is zero. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
499 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
500 The elements of ARGV aren't really const, because we permute them. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
501 But we pretend they're const in the prototype to be compatible |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
502 with other systems. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
503 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
504 LONGOPTS is a vector of `struct option' terminated by an |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
505 element containing a name which is zero. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
506 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
507 LONGIND returns the index in LONGOPT of the long-named option found. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
508 It is only valid when a long-named option has been found by the most |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
509 recent call. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
510 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
511 If LONG_ONLY is nonzero, '-' as well as '--' can introduce |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
512 long-named options. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
513 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
514 int |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
515 _getopt_internal (argc, argv, optstring, longopts, longind, long_only) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
516 int argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
517 char *const *argv; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
518 const char *optstring; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
519 const struct option *longopts; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
520 int *longind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
521 int long_only; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
522 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
523 optarg = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
524 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
525 if (optind == 0 || !__getopt_initialized) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
526 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
527 if (optind == 0) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
528 optind = 1; /* Don't scan ARGV[0], the program name. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
529 optstring = _getopt_initialize (argc, argv, optstring); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
530 __getopt_initialized = 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
531 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
532 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
533 /* Test whether ARGV[optind] points to a non-option argument. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
534 Either it does not have option syntax, or there is an environment flag |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
535 from the shell indicating it is not an option. The later information |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
536 is only used when the used in the GNU libc. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
537 #ifdef _LIBC |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
538 # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
539 || (optind < nonoption_flags_len \ |
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
540 && __getopt_nonoption_flags[optind] == '1')) |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
541 #else |
21793
465a6898b727
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21501
diff
changeset
|
542 # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') |
17502
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
543 #endif |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
544 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
545 if (nextchar == NULL || *nextchar == '\0') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
546 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
547 /* Advance to the next ARGV-element. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
548 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
549 /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
550 moved back by the user (who may also have changed the arguments). */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
551 if (last_nonopt > optind) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
552 last_nonopt = optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
553 if (first_nonopt > optind) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
554 first_nonopt = optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
555 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
556 if (ordering == PERMUTE) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
557 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
558 /* If we have just processed some options following some non-options, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
559 exchange them so that the options come first. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
560 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
561 if (first_nonopt != last_nonopt && last_nonopt != optind) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
562 exchange ((char **) argv); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
563 else if (last_nonopt != optind) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
564 first_nonopt = optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
565 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
566 /* Skip any additional non-options |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
567 and extend the range of non-options previously skipped. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
568 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
569 while (optind < argc && NONOPTION_P) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
570 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
571 last_nonopt = optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
572 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
573 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
574 /* The special ARGV-element `--' means premature end of options. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
575 Skip it like a null option, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
576 then exchange with previous non-options as if it were an option, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
577 then skip everything else like a non-option. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
578 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
579 if (optind != argc && !strcmp (argv[optind], "--")) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
580 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
581 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
582 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
583 if (first_nonopt != last_nonopt && last_nonopt != optind) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
584 exchange ((char **) argv); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
585 else if (first_nonopt == last_nonopt) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
586 first_nonopt = optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
587 last_nonopt = argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
588 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
589 optind = argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
590 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
591 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
592 /* If we have done all the ARGV-elements, stop the scan |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
593 and back over any non-options that we skipped and permuted. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
594 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
595 if (optind == argc) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
596 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
597 /* Set the next-arg-index to point at the non-options |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
598 that we previously skipped, so the caller will digest them. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
599 if (first_nonopt != last_nonopt) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
600 optind = first_nonopt; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
601 return -1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
602 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
603 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
604 /* If we have come to a non-option and did not permute it, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
605 either stop the scan or describe it to the caller and pass it by. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
606 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
607 if (NONOPTION_P) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
608 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
609 if (ordering == REQUIRE_ORDER) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
610 return -1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
611 optarg = argv[optind++]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
612 return 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
613 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
614 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
615 /* We have found another option-ARGV-element. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
616 Skip the initial punctuation. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
617 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
618 nextchar = (argv[optind] + 1 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
619 + (longopts != NULL && argv[optind][1] == '-')); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
620 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
621 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
622 /* Decode the current option-ARGV-element. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
623 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
624 /* Check whether the ARGV-element is a long option. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
625 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
626 If long_only and the ARGV-element has the form "-f", where f is |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
627 a valid short option, don't consider it an abbreviated form of |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
628 a long option that starts with f. Otherwise there would be no |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
629 way to give the -f short option. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
630 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
631 On the other hand, if there's a long option "fubar" and |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
632 the ARGV-element is "-fu", do consider that an abbreviation of |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
633 the long option, just like "--fu", and not "-f" with arg "u". |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
634 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
635 This distinction seems to be the most useful approach. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
636 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
637 if (longopts != NULL |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
638 && (argv[optind][1] == '-' |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
639 || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
640 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
641 char *nameend; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
642 const struct option *p; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
643 const struct option *pfound = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
644 int exact = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
645 int ambig = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
646 int indfound = -1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
647 int option_index; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
648 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
649 for (nameend = nextchar; *nameend && *nameend != '='; nameend++) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
650 /* Do nothing. */ ; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
651 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
652 /* Test all long options for either exact match |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
653 or abbreviated matches. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
654 for (p = longopts, option_index = 0; p->name; p++, option_index++) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
655 if (!strncmp (p->name, nextchar, nameend - nextchar)) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
656 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
657 if ((unsigned int) (nameend - nextchar) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
658 == (unsigned int) strlen (p->name)) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
659 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
660 /* Exact match found. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
661 pfound = p; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
662 indfound = option_index; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
663 exact = 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
664 break; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
665 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
666 else if (pfound == NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
667 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
668 /* First nonexact match found. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
669 pfound = p; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
670 indfound = option_index; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
671 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
672 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
673 /* Second or later nonexact match found. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
674 ambig = 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
675 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
676 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
677 if (ambig && !exact) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
678 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
679 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
680 fprintf (stderr, _("%s: option `%s' is ambiguous\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
681 argv[0], argv[optind]); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
682 nextchar += strlen (nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
683 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
684 optopt = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
685 return '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
686 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
687 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
688 if (pfound != NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
689 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
690 option_index = indfound; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
691 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
692 if (*nameend) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
693 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
694 /* Don't test has_arg with >, because some C compilers don't |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
695 allow it to be used on enums. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
696 if (pfound->has_arg) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
697 optarg = nameend + 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
698 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
699 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
700 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
701 if (argv[optind - 1][1] == '-') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
702 /* --option */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
703 fprintf (stderr, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
704 _("%s: option `--%s' doesn't allow an argument\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
705 argv[0], pfound->name); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
706 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
707 /* +option or -option */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
708 fprintf (stderr, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
709 _("%s: option `%c%s' doesn't allow an argument\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
710 argv[0], argv[optind - 1][0], pfound->name); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
711 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
712 nextchar += strlen (nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
713 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
714 optopt = pfound->val; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
715 return '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
716 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
717 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
718 else if (pfound->has_arg == 1) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
719 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
720 if (optind < argc) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
721 optarg = argv[optind++]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
722 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
723 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
724 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
725 fprintf (stderr, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
726 _("%s: option `%s' requires an argument\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
727 argv[0], argv[optind - 1]); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
728 nextchar += strlen (nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
729 optopt = pfound->val; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
730 return optstring[0] == ':' ? ':' : '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
731 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
732 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
733 nextchar += strlen (nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
734 if (longind != NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
735 *longind = option_index; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
736 if (pfound->flag) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
737 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
738 *(pfound->flag) = pfound->val; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
739 return 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
740 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
741 return pfound->val; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
742 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
743 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
744 /* Can't find it as a long option. If this is not getopt_long_only, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
745 or the option starts with '--' or is not a valid short |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
746 option, then it's an error. |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
747 Otherwise interpret it as a short option. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
748 if (!long_only || argv[optind][1] == '-' |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
749 || my_index (optstring, *nextchar) == NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
750 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
751 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
752 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
753 if (argv[optind][1] == '-') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
754 /* --option */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
755 fprintf (stderr, _("%s: unrecognized option `--%s'\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
756 argv[0], nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
757 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
758 /* +option or -option */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
759 fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
760 argv[0], argv[optind][0], nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
761 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
762 nextchar = (char *) ""; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
763 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
764 optopt = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
765 return '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
766 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
767 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
768 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
769 /* Look at and handle the next short option-character. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
770 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
771 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
772 char c = *nextchar++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
773 char *temp = my_index (optstring, c); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
774 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
775 /* Increment `optind' when we start to process its last character. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
776 if (*nextchar == '\0') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
777 ++optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
778 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
779 if (temp == NULL || c == ':') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
780 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
781 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
782 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
783 if (posixly_correct) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
784 /* 1003.2 specifies the format of this message. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
785 fprintf (stderr, _("%s: illegal option -- %c\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
786 argv[0], c); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
787 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
788 fprintf (stderr, _("%s: invalid option -- %c\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
789 argv[0], c); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
790 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
791 optopt = c; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
792 return '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
793 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
794 /* Convenience. Treat POSIX -W foo same as long option --foo */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
795 if (temp[0] == 'W' && temp[1] == ';') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
796 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
797 char *nameend; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
798 const struct option *p; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
799 const struct option *pfound = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
800 int exact = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
801 int ambig = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
802 int indfound = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
803 int option_index; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
804 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
805 /* This is an option that requires an argument. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
806 if (*nextchar != '\0') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
807 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
808 optarg = nextchar; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
809 /* If we end this ARGV-element by taking the rest as an arg, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
810 we must advance to the next element now. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
811 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
812 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
813 else if (optind == argc) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
814 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
815 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
816 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
817 /* 1003.2 specifies the format of this message. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
818 fprintf (stderr, _("%s: option requires an argument -- %c\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
819 argv[0], c); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
820 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
821 optopt = c; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
822 if (optstring[0] == ':') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
823 c = ':'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
824 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
825 c = '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
826 return c; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
827 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
828 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
829 /* We already incremented `optind' once; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
830 increment it again when taking next ARGV-elt as argument. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
831 optarg = argv[optind++]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
832 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
833 /* optarg is now the argument, see if it's in the |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
834 table of longopts. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
835 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
836 for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
837 /* Do nothing. */ ; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
838 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
839 /* Test all long options for either exact match |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
840 or abbreviated matches. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
841 for (p = longopts, option_index = 0; p->name; p++, option_index++) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
842 if (!strncmp (p->name, nextchar, nameend - nextchar)) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
843 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
844 if ((unsigned int) (nameend - nextchar) == strlen (p->name)) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
845 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
846 /* Exact match found. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
847 pfound = p; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
848 indfound = option_index; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
849 exact = 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
850 break; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
851 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
852 else if (pfound == NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
853 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
854 /* First nonexact match found. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
855 pfound = p; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
856 indfound = option_index; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
857 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
858 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
859 /* Second or later nonexact match found. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
860 ambig = 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
861 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
862 if (ambig && !exact) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
863 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
864 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
865 fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
866 argv[0], argv[optind]); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
867 nextchar += strlen (nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
868 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
869 return '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
870 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
871 if (pfound != NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
872 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
873 option_index = indfound; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
874 if (*nameend) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
875 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
876 /* Don't test has_arg with >, because some C compilers don't |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
877 allow it to be used on enums. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
878 if (pfound->has_arg) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
879 optarg = nameend + 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
880 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
881 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
882 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
883 fprintf (stderr, _("\ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
884 %s: option `-W %s' doesn't allow an argument\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
885 argv[0], pfound->name); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
886 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
887 nextchar += strlen (nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
888 return '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
889 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
890 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
891 else if (pfound->has_arg == 1) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
892 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
893 if (optind < argc) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
894 optarg = argv[optind++]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
895 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
896 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
897 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
898 fprintf (stderr, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
899 _("%s: option `%s' requires an argument\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
900 argv[0], argv[optind - 1]); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
901 nextchar += strlen (nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
902 return optstring[0] == ':' ? ':' : '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
903 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
904 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
905 nextchar += strlen (nextchar); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
906 if (longind != NULL) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
907 *longind = option_index; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
908 if (pfound->flag) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
909 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
910 *(pfound->flag) = pfound->val; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
911 return 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
912 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
913 return pfound->val; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
914 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
915 nextchar = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
916 return 'W'; /* Let the application handle it. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
917 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
918 if (temp[1] == ':') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
919 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
920 if (temp[2] == ':') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
921 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
922 /* This is an option that accepts an argument optionally. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
923 if (*nextchar != '\0') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
924 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
925 optarg = nextchar; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
926 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
927 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
928 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
929 optarg = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
930 nextchar = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
931 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
932 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
933 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
934 /* This is an option that requires an argument. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
935 if (*nextchar != '\0') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
936 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
937 optarg = nextchar; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
938 /* If we end this ARGV-element by taking the rest as an arg, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
939 we must advance to the next element now. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
940 optind++; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
941 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
942 else if (optind == argc) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
943 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
944 if (opterr) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
945 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
946 /* 1003.2 specifies the format of this message. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
947 fprintf (stderr, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
948 _("%s: option requires an argument -- %c\n"), |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
949 argv[0], c); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
950 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
951 optopt = c; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
952 if (optstring[0] == ':') |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
953 c = ':'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
954 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
955 c = '?'; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
956 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
957 else |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
958 /* We already incremented `optind' once; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
959 increment it again when taking next ARGV-elt as argument. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
960 optarg = argv[optind++]; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
961 nextchar = NULL; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
962 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
963 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
964 return c; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
965 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
966 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
967 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
968 int |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
969 getopt (argc, argv, optstring) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
970 int argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
971 char *const *argv; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
972 const char *optstring; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
973 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
974 return _getopt_internal (argc, argv, optstring, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
975 (const struct option *) 0, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
976 (int *) 0, |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
977 0); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
978 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
979 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
980 #endif /* Not ELIDE_CODE. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
981 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
982 #ifdef TEST |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
983 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
984 /* Compile with -DTEST to make an executable for use in testing |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
985 the above definition of `getopt'. */ |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
986 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
987 int |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
988 main (argc, argv) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
989 int argc; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
990 char **argv; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
991 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
992 int c; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
993 int digit_optind = 0; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
994 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
995 while (1) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
996 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
997 int this_option_optind = optind ? optind : 1; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
998 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
999 c = getopt (argc, argv, "abc:d:0123456789"); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1000 if (c == -1) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1001 break; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1002 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1003 switch (c) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1004 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1005 case '0': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1006 case '1': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1007 case '2': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1008 case '3': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1009 case '4': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1010 case '5': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1011 case '6': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1012 case '7': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1013 case '8': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1014 case '9': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1015 if (digit_optind != 0 && digit_optind != this_option_optind) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1016 printf ("digits occur in two different argv-elements.\n"); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1017 digit_optind = this_option_optind; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1018 printf ("option %c\n", c); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1019 break; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1020 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1021 case 'a': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1022 printf ("option a\n"); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1023 break; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1024 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1025 case 'b': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1026 printf ("option b\n"); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1027 break; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1028 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1029 case 'c': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1030 printf ("option c with value `%s'\n", optarg); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1031 break; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1032 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1033 case '?': |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1034 break; |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1035 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1036 default: |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1037 printf ("?? getopt returned character code 0%o ??\n", c); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1038 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1039 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1040 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1041 if (optind < argc) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1042 { |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1043 printf ("non-option ARGV-elements: "); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1044 while (optind < argc) |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1045 printf ("%s ", argv[optind++]); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1046 printf ("\n"); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1047 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1048 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1049 exit (0); |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1050 } |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1051 |
8f3dcea869f5
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
1052 #endif /* TEST */ |