chown: return EXIT_FAILURE if one file failed.

NOTE: coreutils chown wont process file series further on error, but busybox does. For consistency among the other tools follow busybox behaviour.

Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
This commit is contained in:
Hiltjo Posthuma 2014-04-23 22:48:04 +02:00 committed by sin
parent 90861840b7
commit 997f4f006c

View File

@ -13,6 +13,7 @@ static void chownpwgr(const char *);
static bool rflag = false; static bool rflag = false;
static struct passwd *pw = NULL; static struct passwd *pw = NULL;
static struct group *gr = NULL; static struct group *gr = NULL;
static int ret = EXIT_SUCCESS;
static void static void
usage(void) usage(void)
@ -62,15 +63,17 @@ main(int argc, char *argv[])
for(; argc > 0; argc--, argv++) for(; argc > 0; argc--, argv++)
chownpwgr(argv[0]); chownpwgr(argv[0]);
return EXIT_SUCCESS; return ret;
} }
void void
chownpwgr(const char *path) chownpwgr(const char *path)
{ {
if(chown(path, pw ? pw->pw_uid : (uid_t)-1, if(chown(path, pw ? pw->pw_uid : (uid_t)-1,
gr ? gr->gr_gid : (gid_t)-1) == -1) gr ? gr->gr_gid : (gid_t)-1) == -1) {
weprintf("chown %s:", path); weprintf("chown %s:", path);
ret = EXIT_FAILURE;
}
if(rflag) if(rflag)
recurse(path, chownpwgr); recurse(path, chownpwgr);
} }