aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/file-prefix-map.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/file-prefix-map.cc b/gcc/file-prefix-map.cc
index 24733f8..439586b 100644
--- a/gcc/file-prefix-map.cc
+++ b/gcc/file-prefix-map.cc
@@ -70,19 +70,29 @@ remap_filename (file_prefix_map *maps, const char *filename)
file_prefix_map *map;
char *s;
const char *name;
+ char *realname;
size_t name_len;
+ if (lbasename (filename) == filename)
+ return filename;
+
+ realname = lrealpath (filename);
+
for (map = maps; map; map = map->next)
- if (filename_ncmp (filename, map->old_prefix, map->old_len) == 0)
+ if (filename_ncmp (realname, map->old_prefix, map->old_len) == 0)
break;
if (!map)
- return filename;
- name = filename + map->old_len;
+ {
+ free (realname);
+ return filename;
+ }
+ name = realname + map->old_len;
name_len = strlen (name) + 1;
s = (char *) ggc_alloc_atomic (name_len + map->new_len);
memcpy (s, map->new_prefix, map->new_len);
memcpy (s + map->new_len, name, name_len);
+ free (realname);
return s;
}