re PR preprocessor/71681 (header.gcc file lookup is broken for -remap)
authorAndris Pavenis <andris.pavenis@iki.fi>
Fri, 21 Oct 2016 15:52:25 +0000 (18:52 +0300)
committerAndris Pavenis <andris@gcc.gnu.org>
Fri, 21 Oct 2016 15:52:25 +0000 (18:52 +0300)
2016-10-21  Andris Pavenis  <andris.pavenis@iki.fi>

PR preprocessor/71681
* files.c (remap_filename): Fix handling -remap in subdirectories.

From-SVN: r241413

libcpp/ChangeLog
libcpp/files.c

index 40bd5cdc02e08620d71a7df10e44597efc7f31c8..87dae8496e2fa2599add676c03476577f6ab8eba 100644 (file)
@@ -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
index c8bb637fb58c3700c60ee67c1e629315e3d98f1c..e859dfe369382da287140399ac2aeca1df029044 100644 (file)
@@ -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);