commit 90861840b76dd41da28c86da42a47e32ab97c8cf
parent bd99b92e9107dd4af44d57e6a31da153d64df99c
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Wed, 23 Apr 2014 22:00:08 +0200
chmod: process file series behaviour
continue processing files if a chmod on a file in a series failed, but return with an error status code.
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
Diffstat:
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/chmod.c b/chmod.c
@@ -11,6 +11,7 @@ static void chmodr(const char *);
static bool rflag = false;
static char *modestr = "";
static mode_t mask = 0;
+static int ret = EXIT_SUCCESS;
static void
usage(void)
@@ -55,7 +56,7 @@ done:
for (; argc > 0; argc--, argv++)
chmodr(argv[0]);
- return EXIT_SUCCESS;
+ return ret;
}
void
@@ -64,12 +65,17 @@ chmodr(const char *path)
struct stat st;
mode_t m;
- if(stat(path, &st) == -1)
- eprintf("stat %s:", path);
+ if(stat(path, &st) == -1) {
+ weprintf("stat %s:", path);
+ ret = EXIT_FAILURE;
+ return;
+ }
m = parsemode(modestr, st.st_mode, mask);
- if(chmod(path, m) == -1)
+ if(chmod(path, m) == -1) {
weprintf("chmod %s:", path);
+ ret = EXIT_FAILURE;
+ }
if(rflag)
recurse(path, chmodr);
}