From dba6ec5d0c26919fe1bb5892e1fa6feb1f9da337 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 12 Oct 1992 18:04:07 +0000 Subject: [PATCH] Formerly file.c.~19~ --- file.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/file.c b/file.c index 2e5f73f8..d5166291 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) -- 2.47.3