aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/fs.c
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-08-09 11:28:47 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-08-09 11:29:09 -0300
commit17e6000007b820f4b4986e48c7274ce460daadf1 (patch)
treee76e5f02c9baaecce742ec55c7ed36de0a05f4f3 /src/nvim/os/fs.c
parent19f44fda8bc74abdcd13deca47be99b151f69239 (diff)
parent2838f2c3a62f3d6daeb071fee8f3260ac36bb42f (diff)
downloadrneovim-17e6000007b820f4b4986e48c7274ce460daadf1.tar.gz
rneovim-17e6000007b820f4b4986e48c7274ce460daadf1.tar.bz2
rneovim-17e6000007b820f4b4986e48c7274ce460daadf1.zip
Merge pull request #1034 'Implement `os_mkdtemp` on top of `uv_fs_mkdtemp`'
Diffstat (limited to 'src/nvim/os/fs.c')
-rw-r--r--src/nvim/os/fs.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c
index 46aea2bf36..4820a4d165 100644
--- a/src/nvim/os/fs.c
+++ b/src/nvim/os/fs.c
@@ -3,13 +3,6 @@
#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"
@@ -293,18 +286,21 @@ int os_mkdir(const char *path, int32_t mode)
}
/// 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)
+/// @param[in] template Template of the path to the directory with XXXXXX
+/// which would be replaced by random chars.
+/// @param[out] path Path to created directory for success, undefined for
+/// failure.
+/// @return `0` for success, non-zero for failure.
+int os_mkdtemp(const char *template, char *path)
{
-#ifdef WIN32
- return _mktemp(template) && os_mkdir(template, 0700) == 0 ? template : NULL;
-#else
- return mkdtemp(template);
-#endif
+ uv_fs_t request;
+ int result = uv_fs_mkdtemp(uv_default_loop(), &request, template, NULL);
+ if (result == kLibuvSuccess) {
+ strcpy(path, request.path);
+ }
+ uv_fs_req_cleanup(&request);
+ return result;
}
/// Remove a directory.