diff options
Diffstat (limited to 'src/remove.c')
-rw-r--r-- | src/remove.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/remove.c b/src/remove.c index 6269c5097..67e09ccf1 100644 --- a/src/remove.c +++ b/src/remove.c @@ -312,11 +312,21 @@ full_filename_ (DS const *ds, const char *filename) } } - /* Copy directory part, including trailing slash, and then - append the filename part, including a trailing zero byte. */ - memcpy (mempcpy (buf, dir_name, dir_len), filename, filename_len + 1); - - assert (strlen (buf) + 1 == n_bytes_needed); + if (filename_len == 1 && *filename == '.' && dir_len) + { + /* FILENAME is just `.' and dir_len is nonzero. + Copy the directory part, omitting the trailing slash, + and append a trailing zero byte. */ + char *p = mempcpy (buf, dir_name, dir_len - 1); + *p = 0; + } + else + { + /* Copy the directory part, including trailing slash, and then + append the filename part, including a trailing zero byte. */ + memcpy (mempcpy (buf, dir_name, dir_len), filename, filename_len + 1); + assert (strlen (buf) + 1 == n_bytes_needed); + } return buf; } |