diff options
author | Thomas Wienecke <wienecke.t@gmail.com> | 2014-03-14 21:54:08 +0100 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-03-15 11:50:22 -0300 |
commit | c83e8b4dc74ba010e0279b67ef8ffa14103d89f6 (patch) | |
tree | 9969fbde12651043e0986c838c3f21ba924e579d /src/os/fs.c | |
parent | 1f578ec5a1baa75b557af2261518d9fb8aee488b (diff) | |
download | rneovim-c83e8b4dc74ba010e0279b67ef8ffa14103d89f6.tar.gz rneovim-c83e8b4dc74ba010e0279b67ef8ffa14103d89f6.tar.bz2 rneovim-c83e8b4dc74ba010e0279b67ef8ffa14103d89f6.zip |
Move and refactor mch_[gs]etperm to os/fs module.
Diffstat (limited to 'src/os/fs.c')
-rw-r--r-- | src/os/fs.c | 52 |
1 files changed, 40 insertions, 12 deletions
diff --git a/src/os/fs.c b/src/os/fs.c index e8525cb279..4c1b05b678 100644 --- a/src/os/fs.c +++ b/src/os/fs.c @@ -177,13 +177,8 @@ int mch_is_absolute_path(const char_u *fname) */ int mch_isdir(const char_u *name) { - uv_fs_t request; - int result = uv_fs_stat(uv_default_loop(), &request, (const char*) name, NULL); - uint64_t mode = request.statbuf.st_mode; - - uv_fs_req_cleanup(&request); - - if (0 != result) { + long mode = mch_getperm(name); + if (mode < 0) { return FALSE; } @@ -219,12 +214,9 @@ int mch_can_exe(const char_u *name) */ static int is_executable(const char_u *name) { - uv_fs_t request; - int result = uv_fs_stat(uv_default_loop(), &request, (const char*) name, NULL); - uint64_t mode = request.statbuf.st_mode; - uv_fs_req_cleanup(&request); + long mode = mch_getperm(name); - if (result != 0) { + if (mode < 0) { return FALSE; } @@ -287,3 +279,39 @@ static int is_executable_in_path(const char_u *name) assert(false); return FALSE; } + +/* + * Get file permissions for 'name'. + * Returns -1 when it doesn't exist. + */ +long mch_getperm(const char_u *name) +{ + uv_fs_t request; + int result = uv_fs_stat(uv_default_loop(), &request, (const char*) name, NULL); + uint64_t mode = request.statbuf.st_mode; + uv_fs_req_cleanup(&request); + + if (result != 0) { + return -1; + } else { + return (long) mode; + } +} + +/* + * Set file permission for 'name' to 'perm'. + * Returns FAIL for failure, OK otherwise. + */ +int mch_setperm(const char_u *name, int perm) +{ + uv_fs_t request; + int result = uv_fs_chmod(uv_default_loop(), &request, + (const char*)name, perm, NULL); + uv_fs_req_cleanup(&request); + + if (result != 0) { + return FAIL; + } else { + return OK; + } +} |