about summary refs log tree commit diff
path: root/hurd
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2019-01-22 23:38:36 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2019-01-22 23:41:13 +0100
commitee4d79026da2c21c75cccd5795cb4357643f4f5c (patch)
tree971a8e4bf2ec1e97e19b03bcee473bf30693f953 /hurd
parenta95dc01c9e55bef6b48a762e26f15d93100ab9e5 (diff)
downloadglibc-ee4d79026da2c21c75cccd5795cb4357643f4f5c.tar.gz
glibc-ee4d79026da2c21c75cccd5795cb4357643f4f5c.tar.xz
glibc-ee4d79026da2c21c75cccd5795cb4357643f4f5c.zip
hurd: Support AT_EMPTY_PATH
	* hurd/lookup-at.c (__file_name_lookup_at): When at_flags contains
	AT_EMPTY_PATH, call __dir_lookup and __hurd_file_name_lookup_retry
	directly instead of __hurd_file_name_lookup.
Diffstat (limited to 'hurd')
-rw-r--r--hurd/lookup-at.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/hurd/lookup-at.c b/hurd/lookup-at.c
index 813ebee8e5..3e6980f949 100644
--- a/hurd/lookup-at.c
+++ b/hurd/lookup-at.c
@@ -28,6 +28,9 @@ __file_name_lookup_at (int fd, int at_flags,
 {
   error_t err;
   file_t result;
+  int empty = at_flags & AT_EMPTY_PATH;
+
+  at_flags &= ~AT_EMPTY_PATH;
 
   err = __hurd_at_flags (&at_flags, &flags);
   if (err)
@@ -36,6 +39,23 @@ __file_name_lookup_at (int fd, int at_flags,
   if (fd == AT_FDCWD || file_name[0] == '/')
     return __file_name_lookup (file_name, flags, mode);
 
+  if (empty != 0 && file_name[0] == '\0')
+    {
+      enum retry_type doretry;
+      char retryname[1024];	/* XXX string_t LOSES! */
+
+      err = HURD_DPORT_USE (fd, __dir_lookup (port, "", flags, mode,
+					      &doretry, retryname,
+					      &result));
+
+      if (! err)
+	err = __hurd_file_name_lookup_retry (&_hurd_ports_use, &__getdport,
+					     NULL, doretry, retryname,
+					     flags, mode, &result);
+
+      return err ? (__hurd_dfail (fd, err), MACH_PORT_NULL) : result;
+    }
+
   file_t startdir;
   error_t use_init_port (int which, error_t (*operate) (mach_port_t))
     {