diff options
author | pluknet <pluknet@FreeBSD.org> | 2015-06-04 19:18:58 +0000 |
---|---|---|
committer | pluknet <pluknet@FreeBSD.org> | 2015-06-04 19:18:58 +0000 |
commit | 67e600b15fd099ba479f8fd6ff7c9479e34ea188 (patch) | |
tree | 2ac266d448b244eab21a568f4aae8321d2e1d1aa /bin/chmod | |
parent | 128e89a1f9b28a6cad7a63a9c72fd62c97d67cbe (diff) | |
download | FreeBSD-src-67e600b15fd099ba479f8fd6ff7c9479e34ea188.zip FreeBSD-src-67e600b15fd099ba479f8fd6ff7c9479e34ea188.tar.gz |
Change directory permissions in pre-order.
In this order, it won't try to recurse into a directory for which
it doesn't have permission, before changing that permission.
This follows an existing behavior in other BSDs, linux, OS X.
Obtained from: NetBSD
Diffstat (limited to 'bin/chmod')
-rw-r--r-- | bin/chmod/chmod.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/bin/chmod/chmod.c b/bin/chmod/chmod.c index 9b80157..2ccce2d 100644 --- a/bin/chmod/chmod.c +++ b/bin/chmod/chmod.c @@ -162,14 +162,16 @@ done: argv += optind; atflag = AT_SYMLINK_NOFOLLOW; switch (p->fts_info) { - case FTS_D: /* Change it at FTS_DP. */ + case FTS_D: if (!Rflag) fts_set(ftsp, p, FTS_SKIP); - continue; + break; case FTS_DNR: /* Warn, chmod. */ warnx("%s: %s", p->fts_path, strerror(p->fts_errno)); rval = 1; break; + case FTS_DP: /* Already changed at FTS_D. */ + continue; case FTS_ERR: /* Warn, continue. */ case FTS_NS: warnx("%s: %s", p->fts_path, strerror(p->fts_errno)); |