Fix reporting of command line options that need an argument, but which occur as the last option on the command line.
PR ld/19146 * lexsup.c (parse_args): Correct error message for an option that is missing its argument if that option is the last one on the command line.
This commit is contained in:
parent
936384714f
commit
f82aa1657b
@ -1,3 +1,10 @@
|
||||
2015-10-29 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR ld/19146
|
||||
* lexsup.c (parse_args): Correct error message for an option that
|
||||
is missing its argument if that option is the last one on the
|
||||
command line.
|
||||
|
||||
2015-10-29 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR ld/19162
|
||||
|
27
ld/lexsup.c
27
ld/lexsup.c
@ -65,9 +65,9 @@ static void help (void);
|
||||
|
||||
enum control_enum {
|
||||
/* Use one dash before long option name. */
|
||||
ONE_DASH,
|
||||
ONE_DASH = 1,
|
||||
/* Use two dashes before long option name. */
|
||||
TWO_DASHES,
|
||||
TWO_DASHES = 2,
|
||||
/* Only accept two dashes before the long option name.
|
||||
This is an overloading of the use of this enum, since originally it
|
||||
was only intended to tell the --help display function how to display
|
||||
@ -679,7 +679,28 @@ parse_args (unsigned argc, char **argv)
|
||||
switch (optc)
|
||||
{
|
||||
case '?':
|
||||
{
|
||||
/* If the last word on the command line is an option that
|
||||
requires an argument, getopt will refuse to recognise it.
|
||||
Try to catch such options here and issue a more helpful
|
||||
error message than just "unrecognized option". */
|
||||
int opt;
|
||||
|
||||
for (opt = ARRAY_SIZE (ld_options); opt--;)
|
||||
if (ld_options[opt].opt.has_arg == required_argument
|
||||
/* FIXME: There are a few short options that do not
|
||||
have long equivalents, but which require arguments.
|
||||
We should handle them too. */
|
||||
&& ld_options[opt].opt.name != NULL
|
||||
&& strcmp (argv[last_optind] + ld_options[opt].control, ld_options[opt].opt.name) == 0)
|
||||
{
|
||||
einfo (_("%P: %s: missing argument\n"), argv[last_optind]);
|
||||
break;
|
||||
}
|
||||
|
||||
if (opt == -1)
|
||||
einfo (_("%P: unrecognized option '%s'\n"), argv[last_optind]);
|
||||
}
|
||||
/* Fall through. */
|
||||
|
||||
default:
|
||||
@ -997,7 +1018,7 @@ parse_args (unsigned argc, char **argv)
|
||||
break;
|
||||
case OPTION_PLUGIN_OPT:
|
||||
if (plugin_opt_plugin_arg (optarg))
|
||||
einfo(_("%P%F: bad -plugin-opt option\n"));
|
||||
einfo (_("%P%F: bad -plugin-opt option\n"));
|
||||
break;
|
||||
#endif /* ENABLE_PLUGINS */
|
||||
case 'q':
|
||||
|
Loading…
Reference in New Issue
Block a user