This follows Linux' behavior, making it a replacement for the futimens
interface.
---
 sysdeps/mach/hurd/utimensat.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/sysdeps/mach/hurd/utimensat.c b/sysdeps/mach/hurd/utimensat.c
index 97968690e9..4d0edc0962 100644
--- a/sysdeps/mach/hurd/utimensat.c
+++ b/sysdeps/mach/hurd/utimensat.c
@@ -33,13 +33,19 @@ utimensat (int fd, const char *file, const struct timespec 
tsp[2],
   error_t err;
   file_t port;
 
-  port = __file_name_lookup_at (fd, flags, file, 0, 0);
-  if (port == MACH_PORT_NULL)
-    return -1;
+  if (file)
+    {
+      port = __file_name_lookup_at (fd, flags, file, 0, 0);
+      if (port == MACH_PORT_NULL)
+       return -1;
 
-  err = hurd_futimens (port, tsp);
+      err = hurd_futimens (port, tsp);
+
+      __mach_port_deallocate (__mach_task_self (), port);
+    }
+  else
+    err = HURD_DPORT_USE (fd, hurd_futimens (port, tsp));
 
-  __mach_port_deallocate (__mach_task_self (), port);
   if (err)
     return __hurd_fail (err);
   return 0;
-- 
2.45.2


Reply via email to