aboutsummaryrefslogtreecommitdiff
path: root/src/rc
diff options
context:
space:
mode:
authorChristian Ruppert <idl0r@gentoo.org>2012-01-25 23:18:08 +0100
committerWilliam Hubbs <williamh@gentoo.org>2012-01-26 14:42:18 -0600
commit7ea5c614d9c9e36c55f1da3d7fb894e83bbb56f3 (patch)
tree0ab8c0244ab458f2d6674e4b071c71ea62b92eda /src/rc
parent5d441dd376ba0850f82d0927d798bbb60f70bda4 (diff)
Add -W/--writable function to checkpath
Checkpath -W will use access(3p) to determine whether or not a path is writable. This is more accurate than test(1p) because it also takes into account whether or not the filesystem is mounted read-only. Modified by William Hubbs to add the man page update.
Diffstat (limited to 'src/rc')
-rw-r--r--src/rc/checkpath.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/rc/checkpath.c b/src/rc/checkpath.c
index b0914f3f..7ebbb64d 100644
--- a/src/rc/checkpath.c
+++ b/src/rc/checkpath.c
@@ -185,8 +185,8 @@ parse_owner(struct passwd **user, struct group **group, const char *owner)
}
#include "_usage.h"
-#define extraopts "path1 path2 ..."
-#define getoptstring "dDfFpm:o:" getoptstring_COMMON
+#define extraopts "path1 [path2] [...]"
+#define getoptstring "dDfFpm:o:W:" getoptstring_COMMON
static const struct option longopts[] = {
{ "directory", 0, NULL, 'd'},
{ "directory-truncate", 0, NULL, 'D'},
@@ -195,6 +195,7 @@ static const struct option longopts[] = {
{ "pipe", 0, NULL, 'p'},
{ "mode", 1, NULL, 'm'},
{ "owner", 1, NULL, 'o'},
+ { "writable", 1, NULL, 'W'},
longopts_COMMON
};
static const char * const longopts_help[] = {
@@ -205,6 +206,7 @@ static const char * const longopts_help[] = {
"Create a named pipe (FIFO) if not exists",
"Mode to check",
"Owner to check (user:group)",
+ "Check whether the path is writable or not",
longopts_help_COMMON
};
#include "_usage.c"
@@ -249,6 +251,11 @@ checkpath(int argc, char **argv)
eerrorx("%s: owner `%s' not found",
applet, optarg);
break;
+ case 'W':
+ if (argv[optind] != NULL)
+ ewarn("-W/--writable takes only one path, everything else will be ignored");
+ exit(!is_writable(optarg));
+ break;
case_RC_COMMON_GETOPT
}