* lexsup.c (parse_args): Change -l options into --library options
authorIan Lance Taylor <ian@airs.com>
Wed, 22 Apr 1998 20:03:00 +0000 (20:03 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 22 Apr 1998 20:03:00 +0000 (20:03 +0000)
to avoid confusion between -li and -library.

ld/lexsup.c

index 52ec448..72537a7 100644 (file)
@@ -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)