From 44019f6542885fd684c5113c7a5c06308a51102a Mon Sep 17 00:00:00 2001 From: Christian Ruppert Date: Thu, 26 Jan 2012 20:44:33 +0100 Subject: [PATCH] Add is_writable() function to check whether a path is writable or not --- src/includes/rc-misc.h | 7 +++++++ src/rc/rc-misc.c | 9 +++++++++ 2 files changed, 16 insertions(+) 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 #include #include +#include #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; +}