aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
authorAndris Pavenis <andris.pavenis@iki.fi>2016-10-21 18:52:25 +0300
committerAndris Pavenis <andris@gcc.gnu.org>2016-10-21 18:52:25 +0300
commit58f309637224d1f83a0649f66ae961df7a96a980 (patch)
tree81baa4513d64c40182e0f4e142ce0714f4552d4d /libcpp
parent810cb1913f8132a76280574a2a04f1691c0174e0 (diff)
downloadgcc-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')
-rw-r--r--libcpp/ChangeLog5
-rw-r--r--libcpp/files.c12
2 files changed, 14 insertions, 3 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 40bd5cd..87dae84 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-21 Andris Pavenis <andris.pavenis@iki.fi>
+
+ PR preprocessor/71681
+ * files.c (remap_filename): Fix handling -remap in subdirectories.
+
2016-10-12 Jakub Jelinek <jakub@redhat.com>
* include/cpplib.h (struct cpp_options): Add
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);