aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcc.c
diff options
context:
space:
mode:
authorOlivier Hainque <hainque@adacore.com>2018-07-31 08:30:41 +0000
committerOlivier Hainque <hainque@gcc.gnu.org>2018-07-31 08:30:41 +0000
commit58691d4a04c2c8d81298441a7621e6e6df69b21a (patch)
tree2a59e72d1ad06f17e361ff67a641947ba95d60fb /gcc/gcc.c
parentc89b64d7eb41cc750829db403f9e82549ce5e605 (diff)
downloadgcc-58691d4a04c2c8d81298441a7621e6e6df69b21a.zip
gcc-58691d4a04c2c8d81298441a7621e6e6df69b21a.tar.gz
gcc-58691d4a04c2c8d81298441a7621e6e6df69b21a.tar.bz2
getenv_spec_function to prepend / to value for undef var
So the value can be used in places where an absolute path is expected. 2018-07-31 Olivier Hainque <hainque@adacore.com> * gcc.c (getenv_spec_function): Prepend '/' to value for allowed undefined variables. From-SVN: r263081
Diffstat (limited to 'gcc/gcc.c')
-rw-r--r--gcc/gcc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 9ed8a03..48689ed 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -9244,7 +9244,11 @@ print_multilib_info (void)
Returns the value of the environment variable given by its first argument,
concatenated with the second argument. If the variable is not defined, a
fatal error is issued unless such undefs are internally allowed, in which
- case the variable name is used as the variable value. */
+ case the variable name prefixed by a '/' is used as the variable value.
+
+ The leading '/' allows using the result at a spot where a full path would
+ normally be expected and when the actual value doesn't really matter since
+ undef vars are allowed. */
static const char *
getenv_spec_function (int argc, const char **argv)
@@ -9262,8 +9266,15 @@ getenv_spec_function (int argc, const char **argv)
varname = argv[0];
value = env.get (varname);
+ /* If the variable isn't defined and this is allowed, craft our expected
+ return value. Assume variable names used in specs strings don't contain
+ any active spec character so don't need escaping. */
if (!value && spec_undefvar_allowed)
- value = varname;
+ {
+ result = XNEWVAR (char, strlen(varname) + 2);
+ sprintf (result, "/%s", varname);
+ return result;
+ }
if (!value)
fatal_error (input_location,