diff options
Diffstat (limited to 'src/fileio.c')
-rw-r--r-- | src/fileio.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/fileio.c b/src/fileio.c index 0a52982291d..9df3b1bedae 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -566,15 +566,16 @@ is already present. */) static ptrdiff_t directory_file_name (char *dst, char *src, ptrdiff_t srclen, bool multibyte) { - /* Process as Unix format: just remove any final slash. - But leave "/" and "//" unchanged. */ - while (srclen > 1 + /* In Unix-like systems, just remove any final slashes. However, if + they are all slashes, leave "/" and "//" alone, and treat "///" + and longer as if they were "/". */ + if (! (srclen == 2 && IS_DIRECTORY_SEP (src[0]))) + while (srclen > 1 #ifdef DOS_NT - && !IS_ANY_SEP (src[srclen - 2]) + && !IS_ANY_SEP (src[srclen - 2]) #endif - && IS_DIRECTORY_SEP (src[srclen - 1]) - && ! (srclen == 2 && IS_DIRECTORY_SEP (src[0]))) - srclen--; + && IS_DIRECTORY_SEP (src[srclen - 1])) + srclen--; memcpy (dst, src, srclen); dst[srclen] = 0; |