diff options
Diffstat (limited to 'lib-src')
-rw-r--r-- | lib-src/etags.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/lib-src/etags.c b/lib-src/etags.c index 7bacbd3e619..0a308c1984f 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -6484,7 +6484,6 @@ static void canonicalize_filename (register char *fn) { register char* cp; - char sep = '/'; #ifdef DOS_NT /* Canonicalize drive letter case. */ @@ -6492,19 +6491,33 @@ canonicalize_filename (register char *fn) if (fn[0] != '\0' && fn[1] == ':' && ISUPPER (fn[0])) fn[0] = lowcase (fn[0]); - sep = '\\'; -#endif + /* Collapse multiple forward- and back-slashes into a single forward + slash. */ + for (cp = fn; *cp != '\0'; cp++, fn++) + if (*cp == '/' || *cp == '\\') + { + *fn = '/'; + while (cp[1] == '/' || cp[1] == '\\') + cp++; + } + else + *fn = *cp; + +#else /* !DOS_NT */ - /* Collapse multiple separators into a single slash. */ + /* Collapse multiple slashes into a single slash. */ for (cp = fn; *cp != '\0'; cp++, fn++) - if (*cp == sep) + if (*cp == '/') { *fn = '/'; - while (cp[1] == sep) + while (cp[1] == '/') cp++; } else *fn = *cp; + +#endif /* !DOS_NT */ + *fn = '\0'; } |