aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Ruppert <idl0r@gentoo.org>2012-01-26 20:44:33 +0100
committerChristian Ruppert <idl0r@gentoo.org>2012-01-26 20:46:31 +0100
commit44019f6542885fd684c5113c7a5c06308a51102a (patch)
tree9894e04ea8c2f3707bd0de54973d8f279451f4fe /src
parentde5cee2c217e5ed606db19ca1433686048303297 (diff)
Add is_writable() function to check whether a path is writable or not
Diffstat (limited to 'src')
-rw-r--r--src/includes/rc-misc.h7
-rw-r--r--src/rc/rc-misc.c9
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;
+}