annotate lib-src/getopt.c @ 22758:dbd9ecc9dbac

Added next-buffer/previous-buffer keybindings (bound to M-n/M-p). (crisp-unbury-buffer): New function. Fixed bogus XEmacs/Lucid string-match checking. Made modeline entry mouse2-able. (crisp-mode-map): Make this a sparse keymap parented from current-global-map. (crisp-mode-original-keymap): Don't copy the keymap. (crisp-last-last-command): Renamed from last-last-command. defvar it. (crisp-mode): Honor ARG. (crisp-kill-line, crisp-copy-line): When a region isn't highlighted, use the region from point to eol. Honor prefix argument. (crisp-submit-bug-report): New command, taken from cc-mode. Shortened the version numbering, removed the release-version tracking (crisp-version): New function. New keybindings `C-home', `C-end', `M-home', `M-end', `C-f', `M-l', `M-m'. (crisp-copy-line): No need to save point. Removed S-right and S-left bindings. Abstract the marking and selection interfaces so that we can be compatible with both Emacs and XEmacs. And try and make the behavior as close as possible under both environments so that there are no surprises.
author Karl Heuer <kwzh@gnu.org>
date Tue, 14 Jul 1998 22:17:35 +0000
parents 84e894dcafbb
children 1a697e2604c3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */