From f90e70decb2c7bd6fad1f3dad45976b6acbf16da Mon Sep 17 00:00:00 2001 From: deraadt Date: Tue, 16 Aug 2022 13:52:41 +0000 Subject: [PATCH] -v option should only act based upon syscall success. test case is "rm -rfv nonexistent". problem spotted by Alfred Morgan ok millert --- bin/rm/rm.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bin/rm/rm.c b/bin/rm/rm.c index 450446a48a9..944d55d42f9 100644 --- a/bin/rm/rm.c +++ b/bin/rm/rm.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rm.c,v 1.43 2021/10/24 21:24:21 deraadt Exp $ */ +/* $OpenBSD: rm.c,v 1.44 2022/08/16 13:52:41 deraadt Exp $ */ /* $NetBSD: rm.c,v 1.19 1995/09/07 06:48:50 jtc Exp $ */ /*- @@ -203,12 +203,13 @@ rm_tree(char **argv) switch (p->fts_info) { case FTS_DP: case FTS_DNR: - if (!rmdir(p->fts_accpath) || - (fflag && errno == ENOENT)) { + if (!rmdir(p->fts_accpath)) { if (vflag) fprintf(stdout, "%s\n", p->fts_path); continue; } + if (fflag && errno == ENOENT) + continue; break; case FTS_F: @@ -218,12 +219,13 @@ rm_tree(char **argv) FTS_NSOK ? NULL : p->fts_statp); /* FALLTHROUGH */ default: - if (!unlink(p->fts_accpath) || - (fflag && errno == ENOENT)) { + if (!unlink(p->fts_accpath)) { if (vflag) fprintf(stdout, "%s\n", p->fts_path); continue; } + if (fflag && errno == ENOENT) + continue; } warn("%s", p->fts_path); eval = 1; @@ -271,7 +273,7 @@ rm_file(char **argv) if (rval && (!fflag || errno != ENOENT)) { warn("%s", f); eval = 1; - } else if (vflag) + } else if (rval == 0 && vflag) (void)fprintf(stdout, "%s\n", f); } } -- 2.20.1