Move and refactor mch_[gs]etperm to os/fs module.

This commit is contained in:
Thomas Wienecke 2014-03-14 21:54:08 +01:00 committed by Thiago de Arruda
parent 1f578ec5a1
commit c83e8b4dc7
5 changed files with 43 additions and 46 deletions

View File

@ -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;
}
}

View File

@ -17,5 +17,7 @@ int mch_get_usernames(garray_T *usernames);
int mch_get_user_name(char *s, size_t len);
int mch_get_uname(uid_t uid, char *s, size_t len);
char *mch_get_user_directory(const char *name);
long mch_getperm(const char_u *name);
int mch_setperm(const char_u *name, int perm);
#endif

View File

@ -1168,38 +1168,6 @@ int len; /* buffer size, only used when name gets longer */
}
#endif
/*
* Get file permissions for 'name'.
* Returns -1 when it doesn't exist.
*/
long mch_getperm(char_u *name)
{
struct stat statb;
/* Keep the #ifdef outside of stat(), it may be a macro. */
if (stat((char *)name, &statb))
return -1;
#ifdef __INTERIX
/* The top bit makes the value negative, which means the file doesn't
* exist. Remove the bit, we don't use it. */
return statb.st_mode & ~S_ADDACE;
#else
return statb.st_mode;
#endif
}
/*
* set file permission for 'name' to 'perm'
*
* return FAIL for failure, OK otherwise
*/
int mch_setperm(char_u *name, long perm)
{
return chmod((char *)
name,
(mode_t)perm) == 0 ? OK : FAIL;
}
#if defined(HAVE_ACL) || defined(PROTO)
# ifdef HAVE_SYS_ACL_H
# include <sys/acl.h>

View File

@ -28,8 +28,6 @@ void mch_get_host_name(char_u *s, int len);
long mch_get_pid(void);
void slash_adjust(char_u *p);
void fname_case(char_u *name, int len);
long mch_getperm(char_u *name);
int mch_setperm(char_u *name, long perm);
void mch_copy_sec(char_u *from_file, char_u *to_file);
vim_acl_T mch_get_acl(char_u *fname);
void mch_set_acl(char_u *fname, vim_acl_T aclent);

View File

@ -41,6 +41,7 @@
#include "term.h"
#include "ui.h"
#include "window.h"
#include "os/os.h"
/*
* Structure to hold pointers to various items in a tag line.