aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/fileio.c2
-rw-r--r--src/nvim/os/fs.c22
2 files changed, 23 insertions, 1 deletions
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index ea32e19b50..e4ef2bb014 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -5254,7 +5254,7 @@ vim_tempname (
# ifdef HAVE_MKDTEMP
/* Leave room for filename */
STRCAT(itmp, "vXXXXXX");
- if (mkdtemp((char *)itmp) != NULL)
+ if (os_mkdtemp((char *)itmp) != NULL)
vim_settempdir(itmp);
# else
/* Get an arbitrary number of up to 6 digits. When it's
diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c
index dce95eb3c9..46aea2bf36 100644
--- a/src/nvim/os/fs.c
+++ b/src/nvim/os/fs.c
@@ -3,6 +3,13 @@
#include <assert.h>
+// TODO(hinidu): remove after implementing `os_mkdtemp` on top of libuv
+#ifdef WIN32
+# include <io.h>
+#else
+# include <stdlib.h>
+#endif
+
#include "nvim/os/os.h"
#include "nvim/ascii.h"
#include "nvim/memory.h"
@@ -285,6 +292,21 @@ int os_mkdir(const char *path, int32_t mode)
return result;
}
+/// Create a unique temporary directory.
+/// TODO(hinidu): Implement on top of libuv. ref #850
+///
+/// @param[in,out] template Template of the path to the directory with XXXXXX
+/// which would be replaced by random chars.
+/// @return Pointer to changed `template` for success, `NULL` for failure.
+char *os_mkdtemp(char *template)
+{
+#ifdef WIN32
+ return _mktemp(template) && os_mkdir(template, 0700) == 0 ? template : NULL;
+#else
+ return mkdtemp(template);
+#endif
+}
+
/// Remove a directory.
///
/// @return `0` for success, non-zero for failure.