aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2024-09-19 13:14:39 +0300
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2024-09-19 14:18:39 +0200
commit45246705456aa06df70b30233db3bf99ee008f58 (patch)
tree712c15228376981776af5ffbcfc6333cd8ca6dd3 /sysdeps
parente64a1e81aadf6c401174ac9471ced0f0125c2912 (diff)
downloadglibc-45246705456aa06df70b30233db3bf99ee008f58.zip
glibc-45246705456aa06df70b30233db3bf99ee008f58.tar.gz
glibc-45246705456aa06df70b30233db3bf99ee008f58.tar.bz2
hurd: Avoid file_check_access () RPC for access (F_OK)
A common use case of access () / faccessat () is checking for file existence, not any specific access permissions. In that case, we can avoid doing the file_check_access () RPC; whether the given path had been successfully resolved to a file is all we need to know to answer. This is prompted by GLib switching to use faccessat (F_OK) to implement g_file_query_exists () for local files. https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4272 Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> Message-ID: <20240919101439.179663-1-bugaevc@gmail.com>
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/mach/hurd/faccessat.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sysdeps/mach/hurd/faccessat.c b/sysdeps/mach/hurd/faccessat.c
index 998e319..6d3d123 100644
--- a/sysdeps/mach/hurd/faccessat.c
+++ b/sysdeps/mach/hurd/faccessat.c
@@ -185,6 +185,15 @@ __faccessat_common (int fd, const char *file, int type, int at_flags,
return errfunc (err);
}
+ /* If all we wanted was to check for a file existing at the path,
+ then we already got our answer, and we don't need to call
+ file_check_access (). */
+ if (type == F_OK)
+ {
+ __mach_port_deallocate (__mach_task_self (), io);
+ return 0;
+ }
+
/* Find out what types of access we are allowed to this file. */
err = __file_check_access (io, &allowed);
__mach_port_deallocate (__mach_task_self (), io);