annotate lib-src/getopt.c @ 112119:48f5ac42611a

Reconcile with changes in line movement behavior for long text lines that cross more than a single physical window line, ie when truncate-lines is nil. (allout-next-visible-heading): Provide for change in line-move behavior on long lines when truncate-lines is nil. In that case, line-move can wind up on the same textual line when it moves to the next window line, and moving to the bullet position after the move yields zero advancement. Add logic to detect and compensate for the lack of progress. (allout-current-topic-collapsed-p): move-end-of-line respect for field boundaries is different when operating with body lines shorter than window width versus ones greater than window width, which can yield false negatives in this function. Avoid difference by applying move-end-of-line while field-text-motion is inhibited.
author Ken Manheimer <ken.manheimer@gmail.com>
date Tue, 04 Jan 2011 14:44:10 -0500
parents 1f2482de3237
children f55f9811f5d7 ef719132ddfa
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.
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
2 NOTE: getopt is now part of the C library, so if you don't know what
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
3 "Keep this file name-space clean" means, talk to drepper@gnu.org
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
4 before changing it!
64769
6358e3c6075c Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64642
diff changeset
5 Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
6358e3c6075c Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64642
diff changeset
6 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003,
75348
3d45362f1d38 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 68647
diff changeset
7 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
8 This file is part of the GNU C Library.
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
9
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
10 This program is free software; you can redistribute it and/or modify
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
11 it under the terms of the GNU General Public License as published by
78257
1f2482de3237 Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 75348
diff changeset
12 the Free Software Foundation; either version 3, or (at your option)
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
13 any later version.
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
14
19875
278944a16af3 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents: 19874
diff changeset
15 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
16 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
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
278944a16af3 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents: 19874
diff changeset
18 GNU General Public License for more details.
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
19
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
20 You should have received a copy of the GNU General Public License along
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
21 with this program; if not, write to the Free Software Foundation,
64083
23a17af379b1 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 52401
diff changeset
22 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
23
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
24 /* 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
25 Ditto for AIX 3.2 and <stdlib.h>. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
26 #ifndef _NO_PROTO
21793
465a6898b727 automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21501
diff changeset
27 # define _NO_PROTO
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
28 #endif
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
29
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
30 #ifdef HAVE_CONFIG_H
21793
465a6898b727 automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21501
diff changeset
31 # include <config.h>
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
32 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
33
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
34 #include <stdio.h>
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
35
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
36 /* This needs to come after some library #include
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
37 to get __GNU_LIBRARY__ defined. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
38 #ifdef __GNU_LIBRARY__
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
39 /* 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
40 contain conflicting prototypes for getopt. */
21793
465a6898b727 automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21501
diff changeset
41 # include <stdlib.h>
465a6898b727 automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21501
diff changeset
42 # include <unistd.h>
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
43 #endif /* GNU C library. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
44
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
45 #include <string.h>
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
46
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
47 #ifdef VMS
21793
465a6898b727 automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21501
diff changeset
48 # include <unixlib.h>
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
49 #endif
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
50
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
51 #ifdef _LIBC
48757
edfd05d8ef77 Do include libintl.h if HAVE_LIBINTL_H.
Richard M. Stallman <rms@gnu.org>
parents: 48699
diff changeset
52 # include <libintl.h>
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
53 #else
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
54 # include "gettext.h"
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
55 # define _(msgid) gettext (msgid)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
56 #endif
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
57
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
58 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
59 # include <wchar.h>
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
60 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
61
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
62 #ifndef attribute_hidden
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
63 # define attribute_hidden
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
64 #endif
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
65
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
66 /* Unlike standard Unix `getopt', functions like `getopt_long'
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
67 let the user intersperse the options with the other arguments.
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
68
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
69 As `getopt_long' works, it permutes the elements of ARGV so that,
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
70 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
71 all application programs are extended to handle flexible argument order.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
72
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
73 Using `getopt' or setting the environment variable POSIXLY_CORRECT
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
74 disables permutation.
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
75 Then the application's behavior is completely standard.
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
76
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
77 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
78 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
79
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
80 #include "getopt.h"
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
81 #include "getopt_int.h"
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
82
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
83 /* For communication from `getopt' to the caller.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
84 When `getopt' finds an option that takes an argument,
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
85 the argument value is returned here.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
86 Also, when `ordering' is RETURN_IN_ORDER,
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
87 each non-option ARGV-element is returned here. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
88
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 25980
diff changeset
89 char *optarg;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
90
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
91 /* Index in ARGV of the next element to be scanned.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
92 This is used for communication to and from the caller
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
93 and for communication between successive calls to `getopt'.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
94
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
95 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
96
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
97 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
98 non-option elements that the caller should itself scan.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
99
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
100 Otherwise, `optind' communicates from one call to the next
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
101 how much of ARGV has been scanned so far. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
102
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
103 /* 1003.2 says this must be 1 before any call. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
104 int optind = 1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
105
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
106 /* Callers store zero here to inhibit the error message
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
107 for unrecognized options. */
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 int opterr = 1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
110
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
111 /* Set to an option character which was unrecognized.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
112 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
113 system's own getopt implementation. */
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 int optopt = '?';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
116
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
117 /* Keep a global copy of all internal members of getopt_data. */
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
118
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
119 static struct _getopt_data getopt_data;
17502
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
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
122 #ifndef __GNU_LIBRARY__
22146
84e894dcafbb automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21794
diff changeset
123
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
124 /* Avoid depending on library functions or files
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
125 whose names are inconsistent. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
126
21793
465a6898b727 automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21501
diff changeset
127 #ifndef getenv
465a6898b727 automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21501
diff changeset
128 extern char *getenv ();
465a6898b727 automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 21501
diff changeset
129 #endif
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
130
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
131 #endif /* not __GNU_LIBRARY__ */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
132
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
133 #ifdef _LIBC
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
134 /* Stored original parameters.
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
135 XXX This is no good solution. We should rather copy the args so
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
136 that we can compare them later. But we must not use malloc(3). */
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
137 extern int __libc_argc;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
138 extern char **__libc_argv;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
139
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
140 /* Bash 2.0 gives us an environment variable containing flags
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
141 indicating ARGV elements that should not be considered arguments. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
142
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
143 # ifdef USE_NONOPTION_FLAGS
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
144 /* Defined in getopt_init.c */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
145 extern char *__getopt_nonoption_flags;
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
146 # endif
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
147
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
148 # ifdef USE_NONOPTION_FLAGS
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
149 # define SWAP_FLAGS(ch1, ch2) \
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
150 if (d->__nonoption_flags_len > 0) \
17502
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 char __tmp = __getopt_nonoption_flags[ch1]; \
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
153 __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
154 __getopt_nonoption_flags[ch2] = __tmp; \
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
155 }
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
156 # else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
157 # define SWAP_FLAGS(ch1, ch2)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
158 # endif
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
159 #else /* !_LIBC */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
160 # define SWAP_FLAGS(ch1, ch2)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
161 #endif /* _LIBC */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
162
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
163 /* Exchange two adjacent subsequences of ARGV.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
164 One subsequence is elements [first_nonopt,last_nonopt)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
165 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
166 The other is elements [last_nonopt,optind), which contains all
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
167 the options processed since those non-options were skipped.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
168
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
169 `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
170 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
171
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
172 static void
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
173 exchange (char **argv, struct _getopt_data *d)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
174 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
175 int bottom = d->__first_nonopt;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
176 int middle = d->__last_nonopt;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
177 int top = d->optind;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
178 char *tem;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
179
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
180 /* 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
181 That puts the shorter segment into the right place.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
182 It leaves the longer segment in the right place overall,
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
183 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
184
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
185 #if defined _LIBC && defined USE_NONOPTION_FLAGS
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
186 /* First make sure the handling of the `__getopt_nonoption_flags'
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
187 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
188 of the string. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
189 if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
190 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
191 /* 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
192 presents new arguments. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
193 char *new_str = malloc (top + 1);
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
194 if (new_str == NULL)
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
195 d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
196 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
197 {
20212
90f407354bdf automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 19875
diff changeset
198 memset (__mempcpy (new_str, __getopt_nonoption_flags,
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
199 d->__nonoption_flags_max_len),
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
200 '\0', top + 1 - d->__nonoption_flags_max_len);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
201 d->__nonoption_flags_max_len = top + 1;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
202 __getopt_nonoption_flags = new_str;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
203 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
204 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
205 #endif
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
206
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
207 while (top > middle && middle > bottom)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
208 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
209 if (top - middle > middle - bottom)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
210 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
211 /* Bottom segment is the short one. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
212 int len = middle - bottom;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
213 register int i;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
214
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
215 /* Swap it with the top part of the top segment. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
216 for (i = 0; i < len; i++)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
217 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
218 tem = argv[bottom + i];
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
219 argv[bottom + i] = argv[top - (middle - bottom) + i];
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
220 argv[top - (middle - bottom) + i] = tem;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
221 SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
222 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
223 /* Exclude the moved bottom segment from further swapping. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
224 top -= len;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
225 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
226 else
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 /* Top segment is the short one. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
229 int len = top - middle;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
230 register int i;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
231
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
232 /* Swap it with the bottom part of the bottom segment. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
233 for (i = 0; i < len; i++)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
234 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
235 tem = argv[bottom + i];
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
236 argv[bottom + i] = argv[middle + i];
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
237 argv[middle + i] = tem;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
238 SWAP_FLAGS (bottom + i, middle + i);
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
239 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
240 /* Exclude the moved top segment from further swapping. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
241 bottom += len;
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 }
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 /* Update records for the slots the non-options now occupy. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
246
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
247 d->__first_nonopt += (d->optind - d->__last_nonopt);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
248 d->__last_nonopt = d->optind;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
249 }
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 /* Initialize the internal data when the first call is made. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
252
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
253 static const char *
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
254 _getopt_initialize (int argc, char **argv, const char *optstring,
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
255 int posixly_correct, struct _getopt_data *d)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
256 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
257 /* 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
258 is the program name); the sequence of previously skipped
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
259 non-option ARGV-elements is empty. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
260
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
261 d->__first_nonopt = d->__last_nonopt = d->optind;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
262
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
263 d->__nextchar = NULL;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
264
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
265 d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT");
17502
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 /* Determine how to handle the ordering of options and nonoptions. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
268
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
269 if (optstring[0] == '-')
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
270 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
271 d->__ordering = RETURN_IN_ORDER;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
272 ++optstring;
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 else if (optstring[0] == '+')
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
275 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
276 d->__ordering = REQUIRE_ORDER;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
277 ++optstring;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
278 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
279 else if (d->__posixly_correct)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
280 d->__ordering = REQUIRE_ORDER;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
281 else
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
282 d->__ordering = PERMUTE;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
283
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
284 #if defined _LIBC && defined USE_NONOPTION_FLAGS
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
285 if (!d->__posixly_correct
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
286 && argc == __libc_argc && argv == __libc_argv)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
287 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
288 if (d->__nonoption_flags_max_len == 0)
17502
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 if (__getopt_nonoption_flags == NULL
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
291 || __getopt_nonoption_flags[0] == '\0')
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
292 d->__nonoption_flags_max_len = -1;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
293 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
294 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
295 const char *orig_str = __getopt_nonoption_flags;
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
296 int len = d->__nonoption_flags_max_len = strlen (orig_str);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
297 if (d->__nonoption_flags_max_len < argc)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
298 d->__nonoption_flags_max_len = argc;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
299 __getopt_nonoption_flags =
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
300 (char *) malloc (d->__nonoption_flags_max_len);
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
301 if (__getopt_nonoption_flags == NULL)
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
302 d->__nonoption_flags_max_len = -1;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
303 else
20212
90f407354bdf automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents: 19875
diff changeset
304 memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
305 '\0', d->__nonoption_flags_max_len - len);
17502
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 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
308 d->__nonoption_flags_len = d->__nonoption_flags_max_len;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
309 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
310 else
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
311 d->__nonoption_flags_len = 0;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
312 #endif
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
313
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
314 return optstring;
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
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
317 /* 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
318 given in OPTSTRING.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
319
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
320 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
321 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
322 (aside from the initial '-') are option characters. If `getopt'
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
323 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
324 from each of the option elements.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
325
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
326 If `getopt' finds another option character, it returns that character,
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
327 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
328 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
329
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
330 If there are no more option characters, `getopt' returns -1.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
331 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
332 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
333 so that those that are not options now come last.)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
334
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
335 OPTSTRING is a string containing the legitimate option characters.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
336 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
337 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
338 zero, the error message is suppressed but we still return '?'.
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 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
341 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
342 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
343 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
344 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
345
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
346 If OPTSTRING starts with `-' or `+', it requests different methods of
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
347 handling the non-option ARGV-elements.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
348 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
349
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
350 Long-named options begin with `--' instead of `-'.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
351 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
352 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
353 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
354 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
355 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
356 `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
357 if the `flag' field is zero.
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 LONGOPTS is a vector of `struct option' terminated by an
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
360 element containing a name which is zero.
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 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
363 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
364 recent call.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
365
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
366 If LONG_ONLY is nonzero, '-' as well as '--' can introduce
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
367 long-named options.
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
368
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
369 If POSIXLY_CORRECT is nonzero, behave as if the POSIXLY_CORRECT
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
370 environment variable were set. */
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
371
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
372 int
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
373 _getopt_internal_r (int argc, char **argv, const char *optstring,
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
374 const struct option *longopts, int *longind,
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
375 int long_only, int posixly_correct, struct _getopt_data *d)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
376 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
377 int print_errors = d->opterr;
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
378 if (optstring[0] == ':')
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
379 print_errors = 0;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
380
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
381 if (argc < 1)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
382 return -1;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
383
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
384 d->optarg = NULL;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
385
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
386 if (d->optind == 0 || !d->__initialized)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
387 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
388 if (d->optind == 0)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
389 d->optind = 1; /* Don't scan ARGV[0], the program name. */
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
390 optstring = _getopt_initialize (argc, argv, optstring,
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
391 posixly_correct, d);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
392 d->__initialized = 1;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
393 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
394
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
395 /* Test whether ARGV[optind] points to a non-option argument.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
396 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
397 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
398 is only used when the used in the GNU libc. */
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
399 #if defined _LIBC && defined USE_NONOPTION_FLAGS
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
400 # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
401 || (d->optind < d->__nonoption_flags_len \
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
402 && __getopt_nonoption_flags[d->optind] == '1'))
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
403 #else
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
404 # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
405 #endif
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
406
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
407 if (d->__nextchar == NULL || *d->__nextchar == '\0')
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
408 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
409 /* Advance to the next ARGV-element. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
410
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
411 /* 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
412 moved back by the user (who may also have changed the arguments). */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
413 if (d->__last_nonopt > d->optind)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
414 d->__last_nonopt = d->optind;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
415 if (d->__first_nonopt > d->optind)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
416 d->__first_nonopt = d->optind;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
417
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
418 if (d->__ordering == PERMUTE)
17502
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 /* 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
421 exchange them so that the options come first. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
422
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
423 if (d->__first_nonopt != d->__last_nonopt
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
424 && d->__last_nonopt != d->optind)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
425 exchange ((char **) argv, d);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
426 else if (d->__last_nonopt != d->optind)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
427 d->__first_nonopt = d->optind;
17502
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 /* Skip any additional non-options
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
430 and extend the range of non-options previously skipped. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
431
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
432 while (d->optind < argc && NONOPTION_P)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
433 d->optind++;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
434 d->__last_nonopt = d->optind;
17502
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
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
437 /* The special ARGV-element `--' means premature end of options.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
438 Skip it like a null option,
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
439 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
440 then skip everything else like a non-option. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
441
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
442 if (d->optind != argc && !strcmp (argv[d->optind], "--"))
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
443 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
444 d->optind++;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
445
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
446 if (d->__first_nonopt != d->__last_nonopt
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
447 && d->__last_nonopt != d->optind)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
448 exchange ((char **) argv, d);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
449 else if (d->__first_nonopt == d->__last_nonopt)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
450 d->__first_nonopt = d->optind;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
451 d->__last_nonopt = argc;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
452
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
453 d->optind = argc;
17502
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
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
456 /* 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
457 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
458
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
459 if (d->optind == argc)
17502
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 /* 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
462 that we previously skipped, so the caller will digest them. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
463 if (d->__first_nonopt != d->__last_nonopt)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
464 d->optind = d->__first_nonopt;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
465 return -1;
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
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
468 /* 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
469 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
470
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
471 if (NONOPTION_P)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
472 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
473 if (d->__ordering == REQUIRE_ORDER)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
474 return -1;
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
475 d->optarg = argv[d->optind++];
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
476 return 1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
477 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
478
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
479 /* We have found another option-ARGV-element.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
480 Skip the initial punctuation. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
481
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
482 d->__nextchar = (argv[d->optind] + 1
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
483 + (longopts != NULL && argv[d->optind][1] == '-'));
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
484 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
485
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
486 /* Decode the current option-ARGV-element. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
487
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
488 /* Check whether the ARGV-element is a long option.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
489
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
490 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
491 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
492 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
493 way to give the -f short option.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
494
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
495 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
496 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
497 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
498
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
499 This distinction seems to be the most useful approach. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
500
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
501 if (longopts != NULL
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
502 && (argv[d->optind][1] == '-'
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
503 || (long_only && (argv[d->optind][2]
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
504 || !strchr (optstring, argv[d->optind][1])))))
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
505 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
506 char *nameend;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
507 const struct option *p;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
508 const struct option *pfound = NULL;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
509 int exact = 0;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
510 int ambig = 0;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
511 int indfound = -1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
512 int option_index;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
513
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
514 for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
515 /* Do nothing. */ ;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
516
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
517 /* Test all long options for either exact match
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
518 or abbreviated matches. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
519 for (p = longopts, option_index = 0; p->name; p++, option_index++)
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
520 if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
521 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
522 if ((unsigned int) (nameend - d->__nextchar)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
523 == (unsigned int) strlen (p->name))
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 /* Exact match found. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
526 pfound = p;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
527 indfound = option_index;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
528 exact = 1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
529 break;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
530 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
531 else if (pfound == NULL)
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 /* First nonexact match found. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
534 pfound = p;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
535 indfound = option_index;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
536 }
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
537 else if (long_only
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
538 || pfound->has_arg != p->has_arg
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
539 || pfound->flag != p->flag
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
540 || pfound->val != p->val)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
541 /* Second or later nonexact match found. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
542 ambig = 1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
543 }
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 (ambig && !exact)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
546 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
547 if (print_errors)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
548 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
549 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
550 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
551
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
552 if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
553 argv[0], argv[d->optind]) >= 0)
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
554 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
555 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
556
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
557 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
558 ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
559
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
560 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
561 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
562 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
563 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
564
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
565 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
566 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
567
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
568 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
569 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
570 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
571 fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
572 argv[0], argv[d->optind]);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
573 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
574 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
575 d->__nextchar += strlen (d->__nextchar);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
576 d->optind++;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
577 d->optopt = 0;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
578 return '?';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
579 }
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 if (pfound != NULL)
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 option_index = indfound;
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
584 d->optind++;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
585 if (*nameend)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
586 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
587 /* 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
588 allow it to be used on enums. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
589 if (pfound->has_arg)
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
590 d->optarg = nameend + 1;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
591 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
592 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
593 if (print_errors)
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 25980
diff changeset
594 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
595 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
596 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
597 int n;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
598 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
599
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
600 if (argv[d->optind - 1][1] == '-')
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
601 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
602 /* --option */
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
603 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
604 n = __asprintf (&buf, _("\
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
605 %s: option `--%s' doesn't allow an argument\n"),
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
606 argv[0], pfound->name);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
607 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
608 fprintf (stderr, _("\
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
609 %s: option `--%s' doesn't allow an argument\n"),
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
610 argv[0], pfound->name);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
611 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
612 }
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 25980
diff changeset
613 else
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
614 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
615 /* +option or -option */
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
616 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
617 n = __asprintf (&buf, _("\
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
618 %s: option `%c%s' doesn't allow an argument\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
619 argv[0], argv[d->optind - 1][0],
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
620 pfound->name);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
621 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
622 fprintf (stderr, _("\
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
623 %s: option `%c%s' doesn't allow an argument\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
624 argv[0], argv[d->optind - 1][0],
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
625 pfound->name);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
626 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
627 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
628
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
629 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
630 if (n >= 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
631 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
632 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
633
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
634 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
635 ((_IO_FILE *) stderr)->_flags2
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
636 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
637
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
638 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
639 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
640 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
641 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
642
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
643 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
644 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
645
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
646 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
647 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
648 #endif
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 25980
diff changeset
649 }
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
650
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
651 d->__nextchar += strlen (d->__nextchar);
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
652
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
653 d->optopt = pfound->val;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
654 return '?';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
655 }
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 else if (pfound->has_arg == 1)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
658 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
659 if (d->optind < argc)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
660 d->optarg = argv[d->optind++];
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
661 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
662 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
663 if (print_errors)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
664 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
665 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
666 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
667
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
668 if (__asprintf (&buf, _("\
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
669 %s: option `%s' requires an argument\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
670 argv[0], argv[d->optind - 1]) >= 0)
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
671 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
672 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
673
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
674 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
675 ((_IO_FILE *) stderr)->_flags2
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
676 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
677
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
678 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
679 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
680 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
681 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
682
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
683 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
684 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
685
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
686 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
687 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
688 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
689 fprintf (stderr,
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
690 _("%s: option `%s' requires an argument\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
691 argv[0], argv[d->optind - 1]);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
692 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
693 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
694 d->__nextchar += strlen (d->__nextchar);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
695 d->optopt = pfound->val;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
696 return optstring[0] == ':' ? ':' : '?';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
697 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
698 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
699 d->__nextchar += strlen (d->__nextchar);
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
700 if (longind != NULL)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
701 *longind = option_index;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
702 if (pfound->flag)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
703 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
704 *(pfound->flag) = pfound->val;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
705 return 0;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
706 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
707 return pfound->val;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
708 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
709
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
710 /* 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
711 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
712 option, then it's an error.
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
713 Otherwise interpret it as a short option. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
714 if (!long_only || argv[d->optind][1] == '-'
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
715 || strchr (optstring, *d->__nextchar) == NULL)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
716 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
717 if (print_errors)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
718 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
719 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
720 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
721 int n;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
722 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
723
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
724 if (argv[d->optind][1] == '-')
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
725 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
726 /* --option */
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
727 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
728 n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
729 argv[0], d->__nextchar);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
730 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
731 fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
732 argv[0], d->__nextchar);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
733 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
734 }
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
735 else
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
736 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
737 /* +option or -option */
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
738 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
739 n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
740 argv[0], argv[d->optind][0], d->__nextchar);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
741 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
742 fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
743 argv[0], argv[d->optind][0], d->__nextchar);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
744 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
745 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
746
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
747 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
748 if (n >= 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
749 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
750 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
751
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
752 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
753 ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
754
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
755 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
756 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
757 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
758 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
759
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
760 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
761 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
762
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
763 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
764 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
765 #endif
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
766 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
767 d->__nextchar = (char *) "";
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
768 d->optind++;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
769 d->optopt = 0;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
770 return '?';
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 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
773
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
774 /* Look at and handle the next short option-character. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
775
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
776 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
777 char c = *d->__nextchar++;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
778 char *temp = strchr (optstring, c);
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
779
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
780 /* Increment `optind' when we start to process its last character. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
781 if (*d->__nextchar == '\0')
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
782 ++d->optind;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
783
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
784 if (temp == NULL || c == ':')
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
785 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
786 if (print_errors)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
787 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
788 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
789 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
790 int n;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
791 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
792
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
793 if (d->__posixly_correct)
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
794 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
795 /* 1003.2 specifies the format of this message. */
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
796 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
797 n = __asprintf (&buf, _("%s: illegal option -- %c\n"),
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
798 argv[0], c);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
799 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
800 fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
801 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
802 }
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
803 else
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
804 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
805 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
806 n = __asprintf (&buf, _("%s: invalid option -- %c\n"),
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
807 argv[0], c);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
808 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
809 fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
810 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
811 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
812
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
813 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
814 if (n >= 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
815 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
816 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
817
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
818 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
819 ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
820
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
821 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
822 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
823 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
824 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
825
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
826 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
827 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
828
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
829 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
830 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
831 #endif
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
832 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
833 d->optopt = c;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
834 return '?';
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 /* Convenience. Treat POSIX -W foo same as long option --foo */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
837 if (temp[0] == 'W' && temp[1] == ';')
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 char *nameend;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
840 const struct option *p;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
841 const struct option *pfound = NULL;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
842 int exact = 0;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
843 int ambig = 0;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
844 int indfound = 0;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
845 int option_index;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
846
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
847 /* This is an option that requires an argument. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
848 if (*d->__nextchar != '\0')
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
849 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
850 d->optarg = d->__nextchar;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
851 /* 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
852 we must advance to the next element now. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
853 d->optind++;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
854 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
855 else if (d->optind == argc)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
856 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
857 if (print_errors)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
858 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
859 /* 1003.2 specifies the format of this message. */
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
860 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
861 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
862
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
863 if (__asprintf (&buf,
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
864 _("%s: option requires an argument -- %c\n"),
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
865 argv[0], c) >= 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
866 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
867 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
868
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
869 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
870 ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
871
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
872 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
873 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
874 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
875 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
876
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
877 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
878 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
879
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
880 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
881 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
882 #else
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
883 fprintf (stderr, _("%s: option requires an argument -- %c\n"),
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
884 argv[0], c);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
885 #endif
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
886 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
887 d->optopt = c;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
888 if (optstring[0] == ':')
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
889 c = ':';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
890 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
891 c = '?';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
892 return c;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
893 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
894 else
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
895 /* We already incremented `d->optind' once;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
896 increment it again when taking next ARGV-elt as argument. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
897 d->optarg = argv[d->optind++];
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
898
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
899 /* 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
900 table of longopts. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
901
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
902 for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '=';
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
903 nameend++)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
904 /* Do nothing. */ ;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
905
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
906 /* Test all long options for either exact match
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
907 or abbreviated matches. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
908 for (p = longopts, option_index = 0; p->name; p++, option_index++)
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
909 if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
910 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
911 if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name))
17502
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 /* Exact match found. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
914 pfound = p;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
915 indfound = option_index;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
916 exact = 1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
917 break;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
918 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
919 else if (pfound == NULL)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
920 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
921 /* First nonexact match found. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
922 pfound = p;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
923 indfound = option_index;
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 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
926 /* Second or later nonexact match found. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
927 ambig = 1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
928 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
929 if (ambig && !exact)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
930 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
931 if (print_errors)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
932 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
933 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
934 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
935
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
936 if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
937 argv[0], argv[d->optind]) >= 0)
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
938 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
939 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
940
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
941 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
942 ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
943
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
944 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
945 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
946 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
947 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
948
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
949 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
950 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
951
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
952 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
953 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
954 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
955 fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
956 argv[0], argv[d->optind]);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
957 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
958 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
959 d->__nextchar += strlen (d->__nextchar);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
960 d->optind++;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
961 return '?';
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 if (pfound != NULL)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
964 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
965 option_index = indfound;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
966 if (*nameend)
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 /* 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
969 allow it to be used on enums. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
970 if (pfound->has_arg)
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
971 d->optarg = nameend + 1;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
972 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
973 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
974 if (print_errors)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
975 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
976 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
977 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
978
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
979 if (__asprintf (&buf, _("\
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
980 %s: option `-W %s' doesn't allow an argument\n"),
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
981 argv[0], pfound->name) >= 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
982 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
983 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
984
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
985 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
986 ((_IO_FILE *) stderr)->_flags2
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
987 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
988
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
989 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
990 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
991 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
992 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
993
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
994 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
995 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
996
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
997 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
998 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
999 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1000 fprintf (stderr, _("\
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1001 %s: option `-W %s' doesn't allow an argument\n"),
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1002 argv[0], pfound->name);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1003 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1004 }
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1005
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1006 d->__nextchar += strlen (d->__nextchar);
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1007 return '?';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1008 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1009 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1010 else if (pfound->has_arg == 1)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1011 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1012 if (d->optind < argc)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1013 d->optarg = argv[d->optind++];
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1014 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1015 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1016 if (print_errors)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1017 {
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1018 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1019 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1020
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1021 if (__asprintf (&buf, _("\
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1022 %s: option `%s' requires an argument\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1023 argv[0], argv[d->optind - 1]) >= 0)
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1024 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1025 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1026
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1027 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1028 ((_IO_FILE *) stderr)->_flags2
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1029 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1030
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1031 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1032 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1033 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1034 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1035
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1036 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1037 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1038
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1039 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1040 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1041 #else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1042 fprintf (stderr,
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1043 _("%s: option `%s' requires an argument\n"),
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1044 argv[0], argv[d->optind - 1]);
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1045 #endif
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1046 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1047 d->__nextchar += strlen (d->__nextchar);
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1048 return optstring[0] == ':' ? ':' : '?';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1049 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1050 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1051 d->__nextchar += strlen (d->__nextchar);
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1052 if (longind != NULL)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1053 *longind = option_index;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1054 if (pfound->flag)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1055 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1056 *(pfound->flag) = pfound->val;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1057 return 0;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1058 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1059 return pfound->val;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1060 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1061 d->__nextchar = NULL;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1062 return 'W'; /* Let the application handle it. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1063 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1064 if (temp[1] == ':')
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1065 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1066 if (temp[2] == ':')
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1067 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1068 /* This is an option that accepts an argument optionally. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1069 if (*d->__nextchar != '\0')
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1070 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1071 d->optarg = d->__nextchar;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1072 d->optind++;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1073 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1074 else
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1075 d->optarg = NULL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1076 d->__nextchar = NULL;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1077 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1078 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1079 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1080 /* This is an option that requires an argument. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1081 if (*d->__nextchar != '\0')
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1082 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1083 d->optarg = d->__nextchar;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1084 /* 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
1085 we must advance to the next element now. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1086 d->optind++;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1087 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1088 else if (d->optind == argc)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1089 {
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1090 if (print_errors)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1091 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1092 /* 1003.2 specifies the format of this message. */
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1093 #if defined _LIBC && defined USE_IN_LIBIO
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1094 char *buf;
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1095
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1096 if (__asprintf (&buf, _("\
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1097 %s: option requires an argument -- %c\n"),
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1098 argv[0], c) >= 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1099 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1100 _IO_flockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1101
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1102 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1103 ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1104
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1105 if (_IO_fwide (stderr, 0) > 0)
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1106 __fwprintf (stderr, L"%s", buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1107 else
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1108 fputs (buf, stderr);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1109
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1110 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1111 _IO_funlockfile (stderr);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1112
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1113 free (buf);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1114 }
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1115 #else
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1116 fprintf (stderr,
48647
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1117 _("%s: option requires an argument -- %c\n"),
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1118 argv[0], c);
47ec3831be14 (const): Move outside !HAVE_CONFIG_H conditional.
Richard M. Stallman <rms@gnu.org>
parents: 26083
diff changeset
1119 #endif
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1120 }
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1121 d->optopt = c;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1122 if (optstring[0] == ':')
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1123 c = ':';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1124 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1125 c = '?';
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1126 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1127 else
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1128 /* We already incremented `optind' once;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1129 increment it again when taking next ARGV-elt as argument. */
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1130 d->optarg = argv[d->optind++];
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1131 d->__nextchar = NULL;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1132 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1133 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1134 return c;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1135 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1136 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1137
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1138 int
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1139 _getopt_internal (int argc, char **argv, const char *optstring,
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1140 const struct option *longopts, int *longind,
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1141 int long_only, int posixly_correct)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1142 {
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1143 int result;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1144
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1145 getopt_data.optind = optind;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1146 getopt_data.opterr = opterr;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1147
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1148 result = _getopt_internal_r (argc, argv, optstring, longopts, longind,
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1149 long_only, posixly_correct, &getopt_data);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1150
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1151 optind = getopt_data.optind;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1152 optarg = getopt_data.optarg;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1153 optopt = getopt_data.optopt;
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1154
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1155 return result;
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1156 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1157
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1158 /* glibc gets a LSB-compliant getopt.
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1159 Standalone applications get a POSIX-compliant getopt. */
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1160 #if _LIBC
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1161 enum { POSIXLY_CORRECT = 0 };
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1162 #else
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1163 enum { POSIXLY_CORRECT = 1 };
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1164 #endif
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1165
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1166 int
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1167 getopt (int argc, char *const *argv, const char *optstring)
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1168 {
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1169 return _getopt_internal (argc, (char **) argv, optstring, NULL, NULL, 0,
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1170 POSIXLY_CORRECT);
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1171 }
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1172
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1173
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1174 #ifdef TEST
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1175
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1176 /* 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
1177 the above definition of `getopt'. */
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1178
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1179 int
64639
385af3e03206 Merge gnulib getopt implementation into Emacs.
Paul Eggert <eggert@twinsun.com>
parents: 64083
diff changeset
1180 main (int argc, char **argv)
17502
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1181 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1182 int c;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1183 int digit_optind = 0;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1184
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1185 while (1)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1186 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1187 int this_option_optind = optind ? optind : 1;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1188
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1189 c = getopt (argc, argv, "abc:d:0123456789");
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1190 if (c == -1)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1191 break;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1192
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1193 switch (c)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1194 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1195 case '0':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1196 case '1':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1197 case '2':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1198 case '3':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1199 case '4':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1200 case '5':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1201 case '6':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1202 case '7':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1203 case '8':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1204 case '9':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1205 if (digit_optind != 0 && digit_optind != this_option_optind)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1206 printf ("digits occur in two different argv-elements.\n");
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1207 digit_optind = this_option_optind;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1208 printf ("option %c\n", c);
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1209 break;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1210
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1211 case 'a':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1212 printf ("option a\n");
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1213 break;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1214
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1215 case 'b':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1216 printf ("option b\n");
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1217 break;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1218
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1219 case 'c':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1220 printf ("option c with value `%s'\n", optarg);
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1221 break;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1222
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1223 case '?':
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1224 break;
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1225
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1226 default:
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1227 printf ("?? getopt returned character code 0%o ??\n", c);
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1228 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1229 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1230
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1231 if (optind < argc)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1232 {
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1233 printf ("non-option ARGV-elements: ");
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1234 while (optind < argc)
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1235 printf ("%s ", argv[optind++]);
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1236 printf ("\n");
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1237 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1238
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1239 exit (0);
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1240 }
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1241
8f3dcea869f5 automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
1242 #endif /* TEST */
64642
6baf27bdd63b Add arch tagline
Miles Bader <miles@gnu.org>
parents: 64639
diff changeset
1243
6baf27bdd63b Add arch tagline
Miles Bader <miles@gnu.org>
parents: 64639
diff changeset
1244 /* arch-tag: 0e6da124-7269-4785-a9de-094c263d20dc
6baf27bdd63b Add arch tagline
Miles Bader <miles@gnu.org>
parents: 64639
diff changeset
1245 (do not change this comment) */