diff options
author | Andris Pavenis <andris.pavenis@iki.fi> | 2016-10-21 18:52:25 +0300 |
---|---|---|
committer | Andris Pavenis <andris@gcc.gnu.org> | 2016-10-21 18:52:25 +0300 |
commit | 58f309637224d1f83a0649f66ae961df7a96a980 (patch) | |
tree | 81baa4513d64c40182e0f4e142ce0714f4552d4d /libcpp/files.c | |
parent | 810cb1913f8132a76280574a2a04f1691c0174e0 (diff) | |
download | gcc-58f309637224d1f83a0649f66ae961df7a96a980.zip gcc-58f309637224d1f83a0649f66ae961df7a96a980.tar.gz gcc-58f309637224d1f83a0649f66ae961df7a96a980.tar.bz2 |
re PR preprocessor/71681 (header.gcc file lookup is broken for -remap)
2016-10-21 Andris Pavenis <andris.pavenis@iki.fi>
PR preprocessor/71681
* files.c (remap_filename): Fix handling -remap in subdirectories.
From-SVN: r241413
Diffstat (limited to 'libcpp/files.c')
-rw-r--r-- | libcpp/files.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libcpp/files.c b/libcpp/files.c index c8bb637..e859dfe 100644 --- a/libcpp/files.c +++ b/libcpp/files.c @@ -1672,7 +1672,7 @@ static char * remap_filename (cpp_reader *pfile, _cpp_file *file) { const char *fname, *p; - char *new_dir; + char *new_dir, *p3; cpp_dir *dir; size_t index, len; @@ -1701,9 +1701,15 @@ remap_filename (cpp_reader *pfile, _cpp_file *file) return NULL; len = dir->len + (p - fname + 1); - new_dir = XNEWVEC (char, len + 1); + new_dir = XNEWVEC (char, len + 2); + p3 = new_dir + dir->len; memcpy (new_dir, dir->name, dir->len); - memcpy (new_dir + dir->len, fname, p - fname + 1); + if (dir->len && !IS_DIR_SEPARATOR (dir->name[dir->len - 1])) + { + *p3++ = '/'; + len++; + } + memcpy (p3, fname, p - fname + 1); new_dir[len] = '\0'; dir = make_cpp_dir (pfile, new_dir, dir->sysp); |