gcc.c (getenv_spec_function): Escape the environment variable's value.
* gcc.c (getenv_spec_function): Escape the environment variable's value. From-SVN: r129825
This commit is contained in:
parent
d6a64b9df9
commit
5557813a4e
@ -1,3 +1,8 @@
|
||||
2007-11-01 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* gcc.c (getenv_spec_function): Escape the environment variable's
|
||||
value.
|
||||
|
||||
2007-11-01 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* doc/invoke.texi (Optimize Options): Under -fcse-follow-jumps,
|
||||
|
19
gcc/gcc.c
19
gcc/gcc.c
@ -7734,6 +7734,9 @@ static const char *
|
||||
getenv_spec_function (int argc, const char **argv)
|
||||
{
|
||||
char *value;
|
||||
char *result;
|
||||
char *ptr;
|
||||
size_t len;
|
||||
|
||||
if (argc != 2)
|
||||
return NULL;
|
||||
@ -7742,7 +7745,21 @@ getenv_spec_function (int argc, const char **argv)
|
||||
if (!value)
|
||||
fatal ("environment variable \"%s\" not defined", argv[0]);
|
||||
|
||||
return concat (value, argv[1], NULL);
|
||||
/* We have to escape every character of the environment variable so
|
||||
they are not interpretted as active spec characters. A
|
||||
particulaly painful case is when we are reading a variable
|
||||
holding a windows path complete with \ separators. */
|
||||
len = strlen (value) * 2 + strlen (argv[1]) + 1;
|
||||
result = xmalloc (len);
|
||||
for (ptr = result; *value; ptr += 2)
|
||||
{
|
||||
ptr[0] = '\\';
|
||||
ptr[1] = *value++;
|
||||
}
|
||||
|
||||
strcpy (ptr, argv[1]);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* if-exists built-in spec function.
|
||||
|
Loading…
Reference in New Issue
Block a user