aboutsummaryrefslogtreecommitdiff
path: root/src/os/fs.c
diff options
context:
space:
mode:
authorThomas Wienecke <wienecke.t@gmail.com>2014-03-14 21:54:08 +0100
committerThiago de Arruda <tpadilha84@gmail.com>2014-03-15 11:50:22 -0300
commitc83e8b4dc74ba010e0279b67ef8ffa14103d89f6 (patch)
tree9969fbde12651043e0986c838c3f21ba924e579d /src/os/fs.c
parent1f578ec5a1baa75b557af2261518d9fb8aee488b (diff)
downloadrneovim-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.c52
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;
+ }
+}