Hi Richard,
On Thu, Aug 28, 2014 at 10:18:22AM +0200, Richard Biener wrote:
> This also matches joined -B/foo
>
> >>> + {
> >>> + const char *arg = av[i] + 2;
> >>> + const char *end;
> >>> +
> >>> + memmove (av + i, av + i + 1, sizeof (char *) * ((ac + 1) - i));
> >>> + ac--;
> >>> + if (*arg == 0)
> >>> + {
> >>> + arg = av[i + 1];
> >>> + if (!arg)
> >>> + {
>
> But this doesn't handle it? common.opt has -B as Joined Separate option
> thus allowing both.
I believe it handles both cases. For the joined case (*arg == 0) is
false and the earlier (arg = av[i] + 2) assignment is used.
>
> >>> + fprintf (stderr, "Usage: gcc-ar [-B prefix] ar arguments
> >>> ...\n");
> >>> + exit (EXIT_FAILURE);
> >>> + }
> >>> + memmove (av + i, av + i + 1, sizeof (char *) * ((ac + 1) - i));
> >>> + ac--;
> >>> + i++;
> >>> + }
> >>> +
> >>> + for (end = arg; *end; end++)
> >>> + ;
> >>> + end--;
> >>> + if (end > arg && *end != '/')
> >>> + {
> >>> + char *newarg = (char *)xmalloc (strlen(arg) + 2);
> >>> +
> >>> + strcpy (newarg, arg);
> >>> + strcat (newarg, "/");
> >>> + arg = newarg;
> >>> + }
>
> Why the above? And why open-coded instead of using strlen?
I assume you mean the for loop.
I always had strange errors later if the paths were not ending
with /, so I'm force adding it.
> >>> +
> >>> + add_prefix (&path, arg);
> >>> + add_prefix (&target_path, arg);
>
> This adds the -B path to the _end_ of the prefix list. Does that match
> gcc driver behavior? The gcc driver uses PREFIX_PRIORITY_B_OPT
> as argument to add_prefix which ends up adding -B prefixes to the
> beginning of the prefix list.
Ok.
-andi