]> sourceware.org Git - glibc.git/commitdiff
hurd: Avoid file_check_access () RPC for access (F_OK)
authorSergey Bugaev <bugaevc@gmail.com>
Thu, 19 Sep 2024 10:14:39 +0000 (13:14 +0300)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Thu, 19 Sep 2024 12:18:39 +0000 (14:18 +0200)
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>

sysdeps/mach/hurd/faccessat.c

index 998e31962f9c69852959e0c00d4ed89d8268919d..6d3d123abb465e5c39e20ca323ebbf9414984160 100644 (file)
@@ -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);
This page took 0.03787 seconds and 5 git commands to generate.