From 382057f588fbf2c2f7950b85dd317721b8d04c07 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Mon, 21 Nov 2016 16:47:23 -0600 Subject: Have dirtree_notdotdot() pass through !node->parent so . and .. on the command line aren't filtered out. Audited all the callers and removed redundant calls, adjusted call sequence, etc. (And let rm _not_ do this, because posix.) --- toys/posix/chmod.c | 2 +- toys/posix/grep.c | 2 +- toys/posix/rm.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'toys/posix') diff --git a/toys/posix/chmod.c b/toys/posix/chmod.c index 572dff6a..42924399 100644 --- a/toys/posix/chmod.c +++ b/toys/posix/chmod.c @@ -43,7 +43,7 @@ static int do_chmod(struct dirtree *try) { mode_t mode; - if (try->parent && !dirtree_notdotdot(try)) return 0; + if (!dirtree_notdotdot(try)) return 0; mode = string_to_mode(TT.mode, try->st.st_mode); if (toys.optflags & FLAG_v) { diff --git a/toys/posix/grep.c b/toys/posix/grep.c index 2fe6ac27..a95203a0 100644 --- a/toys/posix/grep.c +++ b/toys/posix/grep.c @@ -313,7 +313,7 @@ static int do_grep_r(struct dirtree *new) { char *name; - if (new->parent && !dirtree_notdotdot(new)) return 0; + if (!dirtree_notdotdot(new)) return 0; if (S_ISDIR(new->st.st_mode)) return DIRTREE_RECURSE; // "grep -r onefile" doesn't show filenames, but "grep -r onedir" should. diff --git a/toys/posix/rm.c b/toys/posix/rm.c index 99fa8edf..2f99c326 100644 --- a/toys/posix/rm.c +++ b/toys/posix/rm.c @@ -28,7 +28,7 @@ static int do_rm(struct dirtree *try) int dir = S_ISDIR(try->st.st_mode), or = 0, using = 0; // Skip . and .. (yes, even explicitly on the command line: posix says to) - if (!dirtree_notdotdot(try)) return 0; + if (isdotdot(try->name)) return 0; // Intentionally fail non-recursive attempts to remove even an empty dir // (via wrong flags to unlinkat) because POSIX says to. -- cgit v1.2.3