diff options
author | ZyX <kp-pav@yandex.ru> | 2015-07-12 14:11:41 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2015-10-08 22:00:11 +0300 |
commit | 09cbec6476f191c683fa48b2e13a12ac2ab69c78 (patch) | |
tree | 3a448ae10c7413d2b7711c2eb1ecedc9afd3c6c4 | |
parent | 0018b4f5790ec3659698dd47a06c94ce4d20467e (diff) | |
download | rneovim-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.c | 21 |
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); } |