aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/fileio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/fileio.c')
-rw-r--r--src/nvim/fileio.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index 5099b3e812..92b48c36cb 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -2688,7 +2688,12 @@ buf_write(
/*
* Isolate one directory name, using an entry in 'bdir'.
*/
- (void)copy_option_part(&dirp, IObuff, IOSIZE, ",");
+ size_t dir_len = copy_option_part(&dirp, IObuff, IOSIZE, ",");
+ p = IObuff + dir_len;
+ bool trailing_pathseps = after_pathsep((char *)IObuff, (char *)p) && p[-1] == p[-2];
+ if (trailing_pathseps) {
+ IObuff[dir_len - 2] = NUL;
+ }
if (*dirp == NUL && !os_isdir(IObuff)) {
int ret;
char *failed_dir;
@@ -2698,8 +2703,7 @@ buf_write(
xfree(failed_dir);
}
}
- p = IObuff + STRLEN(IObuff);
- if (after_pathsep((char *)IObuff, (char *)p) && p[-1] == p[-2]) {
+ if (trailing_pathseps) {
// Ends with '//', Use Full path
if ((p = (char_u *)make_percent_swname((char *)IObuff, (char *)fname))
!= NULL) {
@@ -2849,7 +2853,12 @@ nobackup:
/*
* Isolate one directory name and make the backup file name.
*/
- (void)copy_option_part(&dirp, IObuff, IOSIZE, ",");
+ size_t dir_len = copy_option_part(&dirp, IObuff, IOSIZE, ",");
+ p = IObuff + dir_len;
+ bool trailing_pathseps = after_pathsep((char *)IObuff, (char *)p) && p[-1] == p[-2];
+ if (trailing_pathseps) {
+ IObuff[dir_len - 2] = NUL;
+ }
if (*dirp == NUL && !os_isdir(IObuff)) {
int ret;
char *failed_dir;
@@ -2859,8 +2868,7 @@ nobackup:
xfree(failed_dir);
}
}
- p = IObuff + STRLEN(IObuff);
- if (after_pathsep((char *)IObuff, (char *)p) && p[-1] == p[-2]) {
+ if (trailing_pathseps) {
// path ends with '//', use full path
if ((p = (char_u *)make_percent_swname((char *)IObuff, (char *)fname))
!= NULL) {