aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toys/posix/rm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/toys/posix/rm.c b/toys/posix/rm.c
index dae5eee4..59d5061b 100644
--- a/toys/posix/rm.c
+++ b/toys/posix/rm.c
@@ -35,8 +35,8 @@ static int do_rm(struct dirtree *try)
if (dir && !(flags & (FLAG_r|FLAG_R))) goto skip;
// This is either the posix section 2(b) prompt or the section 3 prompt.
- if (!(flags & FLAG_f) && faccessat(fd, try->name, W_OK, AT_SYMLINK_NOFOLLOW))
- or++;
+ if (!(flags & FLAG_f)
+ && (!S_ISLNK(try->st.st_mode) && faccessat(fd, try->name, W_OK, 0))) or++;
if (!(dir && try->data == -1) && ((or && isatty(0)) || (flags & FLAG_i))) {
char *s = dirtree_path(try, 0);
fprintf(stderr, "rm %s%s", or ? "ro " : "", dir ? "dir " : "");