From: Ian Lance Taylor Date: Wed, 22 Apr 1998 20:03:00 +0000 (+0000) Subject: * lexsup.c (parse_args): Change -l options into --library options X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fc4826cf4d19eb3ed29a2e3a76e36c0f339ff3a3;p=binutils-gdb.git * lexsup.c (parse_args): Change -l options into --library options to avoid confusion between -li and -library. --- diff --git a/ld/lexsup.c b/ld/lexsup.c index 52ec448d66b..72537a77cdc 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)