diff options
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 31 |
1 files changed, 29 insertions, 2 deletions
@@ -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) |