diff options
-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; +} |