Commit 735940f4 authored by Paul Eggert's avatar Paul Eggert

Be less picky about EACCES in file test predicates

Problem reported by Tino Calancha (Bug#37445) and others.
* src/fileio.c (PICKY_EACCES): New constant, false by default.
(file_test_errno): Ignore EACCES if not picky.
(check_file_access): Investigate EACCES problems further
if picky.
parent 94ca934a
Pipeline #3186 failed with stage
in 56 minutes and 30 seconds
...@@ -253,9 +253,23 @@ file_attribute_errno (Lisp_Object file, int err) ...@@ -253,9 +253,23 @@ file_attribute_errno (Lisp_Object file, int err)
return file_metadata_errno ("Getting attributes", file, err); return file_metadata_errno ("Getting attributes", file, err);
} }
/* In theory, EACCES errors for predicates like file-readable-p should
be checked further because they may be problems with an ancestor
directory instead of with the file itself, which means that we
don't have reliable info about the requested file. In practice,
though, such errors are common enough that signaling them can be
annoying even if the errors are real (e.g., Bug#37445). So return
nil for EACCES unless compiling with -DPICKY_EACCES, which is off
by default. */
#ifndef PICKY_EACCES
enum { PICKY_EACCES = false };
#endif
static Lisp_Object static Lisp_Object
file_test_errno (Lisp_Object file, int err) file_test_errno (Lisp_Object file, int err)
{ {
if (!PICKY_EACCES && err == EACCES)
return Qnil;
return file_metadata_errno ("Testing file", file, err); return file_metadata_errno ("Testing file", file, err);
} }
...@@ -2745,7 +2759,7 @@ check_file_access (Lisp_Object file, Lisp_Object operation, int amode) ...@@ -2745,7 +2759,7 @@ check_file_access (Lisp_Object file, Lisp_Object operation, int amode)
return Qt; return Qt;
int err = errno; int err = errno;
if (err == EROFS || err == ETXTBSY if (err == EROFS || err == ETXTBSY
|| (err == EACCES && amode != F_OK || (PICKY_EACCES && err == EACCES && amode != F_OK
&& file_access_p (encoded_file, F_OK))) && file_access_p (encoded_file, F_OK)))
{ {
errno = err; errno = err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment