summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/remove.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/remove.c b/src/remove.c
index 2db385909..d6d680316 100644
--- a/src/remove.c
+++ b/src/remove.c
@@ -172,12 +172,11 @@ write_protected_non_symlink (int fd_cwd,
mess up with long file names). */
{
- /* Use faccessat if possible, so as to avoid the expense
- of processing an N-component name. */
-#if HAVE_FACCESSAT && AT_EACCESS
- if (faccessat (fd_cwd, file, W_OK, AT_EACCESS) == 0)
+ /* This implements #1: on decent systems, either faccessat is
+ native or /proc/self/fd allows us to skip a chdir. */
+ if (!openat_needs_fchdir ()
+ && faccessat (fd_cwd, file, W_OK, AT_EACCESS) == 0)
return 0;
-#endif
/* This implements #5: */
size_t file_name_len = strlen (full_name);