aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/fileio.c
diff options
context:
space:
mode:
authorGregory Anders <greg@gpanders.com>2021-08-27 10:33:51 -0600
committerGregory Anders <greg@gpanders.com>2021-08-27 10:45:25 -0600
commit4e516e53bfde35901b055bbc85d84a6d471ebc34 (patch)
tree37a704585e064569b0cd4c90f2b2296af44ae8ae /src/nvim/fileio.c
parent460019366e58e1bcd42959f76494e38bd895e762 (diff)
downloadrneovim-4e516e53bfde35901b055bbc85d84a6d471ebc34.tar.gz
rneovim-4e516e53bfde35901b055bbc85d84a6d471ebc34.tar.bz2
rneovim-4e516e53bfde35901b055bbc85d84a6d471ebc34.zip
fix: remove trailing slashes before making directory
Remove the trailing slashes from 'undofile' and 'backupdir' before creating directories. They cause problems on Windows which doesn't recognize these slashes as proper path separators.
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) {