summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'file.c')
-rw-r--r--file.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/file.c b/file.c
index 2e5f73f..d516629 100644
--- a/file.c
+++ b/file.c
@@ -50,8 +50,20 @@ lookup_file (name)
if (*name == '\0')
abort ();
+ /* This is also done in parse_file_seq, so this is redundant
+ for names read from makefiles. It is here for names passed
+ on the command line. */
while (name[0] == '.' && name[1] == '/' && name[2] != '\0')
- name += 2;
+ {
+ name += 2;
+ while (*name == '/')
+ /* Skip following slashes: ".//foo" is "foo", not "/foo". */
+ ++name;
+ }
+
+ if (*name == '\0')
+ /* It was all slashes after a dot. */
+ name = "./";
hashval = 0;
for (n = name; *n != '\0'; ++n)
@@ -79,7 +91,22 @@ enter_file (name)
for names read from makefiles. It is here for names passed
on the command line. */
while (name[0] == '.' && name[1] == '/' && name[2] != '\0')
- name += 2;
+ {
+ name += 2;
+ while (*name == '/')
+ /* Skip following slashes: ".//foo" is "foo", not "/foo". */
+ ++name;
+ }
+
+ if (*name == '\0')
+ {
+ /* It was all slashes! Move back to the dot and truncate
+ it after the first slash, so it becomes just "./". */
+ do
+ --name;
+ while (name[0] != '.');
+ name[2] = '\0';
+ }
hashval = 0;
for (n = name; *n != '\0'; ++n)