aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1998-04-22 20:03:00 +0000
committerIan Lance Taylor <ian@airs.com>1998-04-22 20:03:00 +0000
commitfc4826cf4d19eb3ed29a2e3a76e36c0f339ff3a3 (patch)
tree7f4c34833504cde2fa4fc8c3f64c124d71abc747
parentc24db1ca0f41b14120c8f381f490b412aec08e3b (diff)
downloadgdb-fc4826cf4d19eb3ed29a2e3a76e36c0f339ff3a3.zip
gdb-fc4826cf4d19eb3ed29a2e3a76e36c0f339ff3a3.tar.gz
gdb-fc4826cf4d19eb3ed29a2e3a76e36c0f339ff3a3.tar.bz2
* lexsup.c (parse_args): Change -l options into --library options
to avoid confusion between -li and -library.
-rw-r--r--ld/lexsup.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/ld/lexsup.c b/ld/lexsup.c
index 52ec448..72537a7 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -396,11 +396,35 @@ parse_args (argc, argv)
|| ! isdigit ((unsigned char) argv[i + 1][0])))
argv[i] = (char *) "--shared";
+ /* Because we permit long options to start with a single dash, and
+ we have a --library option, and the -l option is conventionally
+ used with an immediately following argument, we can have bad
+ results of somebody tries to use -l with a library whose name
+ happens to start with "ibrary", as in -li. We avoid problems by
+ simply turning -l into --library. This means that users will
+ have to use two dashes in order to use --library, which is OK
+ since that's how it is documented.
+
+ FIXME: It's possible that this problem can arise for other short
+ options as well, although the user does always have the recourse
+ of adding a space between the option and the argument. */
+ for (i = 1; i < argc; i++)
+ {
+ if (argv[i][0] == '-'
+ && argv[i][1] == 'l'
+ && argv[i][2] != '\0')
+ {
+ char *n;
+
+ n = (char *) xmalloc (strlen (argv[i]) + 20);
+ sprintf (n, "--library=%s", argv[i] + 2);
+ argv[i] = n;
+ }
+ }
+
last_optind = -1;
while (1)
{
- /* getopt_long_only is like getopt_long, but '-' as well as '--' can
- indicate a long option. */
int longind;
int optc;
@@ -417,6 +441,8 @@ parse_args (argc, argv)
last_optind = optind;
}
+ /* getopt_long_only is like getopt_long, but '-' as well as '--'
+ can indicate a long option. */
optc = getopt_long_only (argc, argv, shortopts, longopts, &longind);
if (optc == -1)