diff options
author | Christian Ruppert <idl0r@gentoo.org> | 2012-01-26 20:44:33 +0100 |
---|---|---|
committer | Christian Ruppert <idl0r@gentoo.org> | 2012-01-26 20:46:31 +0100 |
commit | 44019f6542885fd684c5113c7a5c06308a51102a (patch) | |
tree | 9894e04ea8c2f3707bd0de54973d8f279451f4fe | |
parent | de5cee2c217e5ed606db19ca1433686048303297 (diff) |
Add is_writable() function to check whether a path is writable or not
-rw-r--r-- | src/includes/rc-misc.h | 7 | ||||
-rw-r--r-- | src/rc/rc-misc.c | 9 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/includes/rc-misc.h b/src/includes/rc-misc.h index 773c4b99..18ed5b9f 100644 --- a/src/includes/rc-misc.h +++ b/src/includes/rc-misc.h @@ -36,6 +36,7 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> +#include <unistd.h> #define RC_LEVEL_BOOT "boot" #define RC_LEVEL_DEFAULT "default" @@ -166,6 +167,12 @@ int svc_lock(const char *); int svc_unlock(const char *, int); pid_t exec_service(const char *, const char *); +/* + * Check whether path is writable or not, + * this also works properly with read-only filesystems + */ +int is_writable(const char *); + #define service_start(service) exec_service(service, "start"); #define service_stop(service) exec_service(service, "stop"); diff --git a/src/rc/rc-misc.c b/src/rc/rc-misc.c index a06ff088..27397d71 100644 --- a/src/rc/rc-misc.c +++ b/src/rc/rc-misc.c @@ -331,3 +331,12 @@ parse_mode(mode_t *mode, char *text) errno = EINVAL; return -1; } + +int +is_writable(const char *path) +{ + if (access(path, W_OK) == 0) + return 1; + + return 0; +} |