aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/lexsup.c17
2 files changed, 13 insertions, 10 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 54739ee..9e05021 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2001-12-13 Alan Modra <amodra@bigpond.net.au>
+
+ * lexsup.c (parse_args): Don't pass shortopts to second call to
+ getopt functions. Restore optind rather than decrementing before
+ second call. Remove errind as it now duplicates last_optind.
+
2001-12-11 Christopher Faylor <cgf@redhat.com>
* emultempl/pe.em (gld_${EMULATION_NAME}_list_options): Fix typo.
diff --git a/ld/lexsup.c b/ld/lexsup.c
index b9b74bd..ca2e9a1 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -542,7 +542,7 @@ parse_args (argc, argv)
last_optind = -1;
while (1)
{
- int longind, errind;
+ int longind;
int optc;
/* Using last_optind lets us avoid calling ldemul_parse_args
@@ -552,21 +552,18 @@ parse_args (argc, argv)
-nx, in which the -n is parsed as a single option, and we
loop around to pick up the -x. */
if (optind != last_optind)
- {
- if (ldemul_parse_args (argc, argv))
- continue;
- last_optind = optind;
- }
+ if (ldemul_parse_args (argc, argv))
+ continue;
/* getopt_long_only is like getopt_long, but '-' as well as '--'
can indicate a long option. */
opterr = 0;
- errind = optind;
+ last_optind = optind;
optc = getopt_long_only (argc, argv, shortopts, longopts, &longind);
if (optc == '?')
{
- --optind;
- optc = getopt_long (argc, argv, shortopts, really_longopts, &longind);
+ optind = last_optind;
+ optc = getopt_long (argc, argv, "-", really_longopts, &longind);
}
if (optc == -1)
@@ -575,7 +572,7 @@ parse_args (argc, argv)
switch (optc)
{
case '?':
- einfo (_("%P: unrecognized option '%s'\n"), argv[errind]);
+ einfo (_("%P: unrecognized option '%s'\n"), argv[last_optind]);
default:
einfo (_("%P%F: use the --help option for usage information\n"));