aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2015-07-12 14:11:41 +0300
committerZyX <kp-pav@yandex.ru>2015-10-08 22:00:11 +0300
commit09cbec6476f191c683fa48b2e13a12ac2ab69c78 (patch)
tree3a448ae10c7413d2b7711c2eb1ecedc9afd3c6c4
parent0018b4f5790ec3659698dd47a06c94ce4d20467e (diff)
downloadrneovim-09cbec6476f191c683fa48b2e13a12ac2ab69c78.tar.gz
rneovim-09cbec6476f191c683fa48b2e13a12ac2ab69c78.tar.bz2
rneovim-09cbec6476f191c683fa48b2e13a12ac2ab69c78.zip
shada: Use os_mkdir_recurse to create directory for ShaDa file
-rw-r--r--src/nvim/shada.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/nvim/shada.c b/src/nvim/shada.c
index f2c3b47baa..17595cde14 100644
--- a/src/nvim/shada.c
+++ b/src/nvim/shada.c
@@ -83,6 +83,8 @@ KHASH_SET_INIT_STR(strset)
(convert_setup(vcp, (char_u *)from, (char_u *)to))
#define os_getperm(f) \
(os_getperm((char_u *) f))
+#define os_isdir(f) (os_isdir((char_u *) f))
+#define path_tail_with_sep(f) ((char *) path_tail_with_sep((char_u *)f))
// From http://www.boost.org/doc/libs/1_43_0/boost/detail/endian.hpp + some
// additional checks done after examining `{compiler} -dM -E - < /dev/null`
@@ -2095,7 +2097,24 @@ shada_write_file_open:
}
}
if (nomerge) {
-shada_write_file_nomerge:
+shada_write_file_nomerge: {}
+ char *const tail = path_tail_with_sep(fname);
+ if (tail != fname) {
+ const char tail_save = *tail;
+ *tail = NUL;
+ if (!os_isdir(fname)) {
+ int ret;
+ char *failed_dir;
+ if ((ret = os_mkdir_recurse(fname, 0700, &failed_dir)) != 0) {
+ EMSG3("Failed to create directory %s for writing ShaDa file: %s",
+ failed_dir, strerror(-ret));
+ xfree(fname);
+ xfree(failed_dir);
+ return FAIL;
+ }
+ }
+ *tail = tail_save;
+ }
fd = (intptr_t) open_file(fname, O_CREAT|O_WRONLY|O_TRUNC,
0600);
}