sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

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:
Mchmod.c | 14++++++++++----
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); }