diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/fileio.c | 2 | ||||
-rw-r--r-- | src/nvim/os/fs.c | 22 |
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. |