This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.27.9000-170-gec1300c


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  ec1300cfc83c716f33ee3231bba0a6e270abfc73 (commit)
       via  bbe762d1e596d7f5a1cd560a229387cb856916e0 (commit)
      from  a1ede3a40249ea2efe54e182998bd8519e37a31e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=ec1300cfc83c716f33ee3231bba0a6e270abfc73

commit ec1300cfc83c716f33ee3231bba0a6e270abfc73
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Tue Mar 6 00:13:54 2018 +0100

    hurd: Add futimesat and utimensat support
    
    	* sysdeps/mach/hurd/utime-helper.c (hurd_futimens): Rename function to
    	hurd_futimes.
    	* sysdeps/mach/hurd/utimes.c (__utimes): Update call accordingly.
    	* sysdeps/mach/hurd/lutimes.c (__lutimes): Likewise.
    	* sysdeps/mach/hurd/futimens.c: Include "utime-helper.c".
    	(__futimens): Move implementation to...
    	* sysdeps/mach/hurd/utime-helper.c (utime_ts_from_tspec,
    	utime_tvalue_from_tspec): ... new helper functions.
    	(hurd_futimens): New function.
    	* sysdeps/mach/hurd/futimesat.c: New file.
    	* sysdeps/mach/hurd/utimensat.c: New file.

diff --git a/ChangeLog b/ChangeLog
index 989881e..27ca1dc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2018-03-05  Samuel Thibault  <samuel.thibault@ens-lyon.org>
+
+	* sysdeps/mach/hurd/utime-helper.c (hurd_futimens): Rename function to
+	hurd_futimes.
+	* sysdeps/mach/hurd/utimes.c (__utimes): Update call accordingly.
+	* sysdeps/mach/hurd/lutimes.c (__lutimes): Likewise.
+	* sysdeps/mach/hurd/futimens.c: Include "utime-helper.c".
+	(__futimens): Move implementation to...
+	* sysdeps/mach/hurd/utime-helper.c (utime_ts_from_tspec,
+	utime_tvalue_from_tspec): ... new helper functions.
+	(hurd_futimens): New function.
+	* sysdeps/mach/hurd/futimesat.c: New file.
+	* sysdeps/mach/hurd/utimensat.c: New file.
+
 2018-03-05  Flávio Cruz  <flaviocruz@gmail.com>
 
 	* sysdeps/mach/hurd/bits/stat.h [__USE_ATFILE] (UTIME_NOW,
diff --git a/sysdeps/mach/hurd/futimens.c b/sysdeps/mach/hurd/futimens.c
index 4a8b0f7..4a3943e 100644
--- a/sysdeps/mach/hurd/futimens.c
+++ b/sysdeps/mach/hurd/futimens.c
@@ -22,6 +22,8 @@
 #include <hurd.h>
 #include <hurd/fd.h>
 
+#include "utime-helper.c"
+
 /* Change the access time of FD to TSP[0] and
    the modification time of FD to TSP[1].  */
 int
@@ -30,20 +32,7 @@ __futimens (int fd, const struct timespec tsp[2])
   struct timespec atime, mtime;
   error_t err;
 
-  if (tsp == NULL)
-    {
-      /* Setting the number of nanoseconds to UTIME_NOW tells the
-         underlying filesystems to use the current time.  */
-      atime.tv_sec = 0;
-      atime.tv_nsec = UTIME_NOW;
-      mtime.tv_sec = 0;
-      mtime.tv_nsec = UTIME_NOW;
-    }
-  else
-    {
-      atime = tsp[0];
-      mtime = tsp[1];
-    }
+  utime_ts_from_tspec (tsp, &atime, &mtime);
 
   err = HURD_DPORT_USE (fd, __file_utimens (port, atime, mtime));
 
@@ -51,25 +40,7 @@ __futimens (int fd, const struct timespec tsp[2])
     {
       time_value_t atim, mtim;
 
-      if (tsp == NULL)
-        /* Setting the number of microseconds to `-1' tells the
-           underlying filesystems to use the current time.  */
-        atim.microseconds = mtim.microseconds = -1;
-      else
-        {
-          if (tsp[0].tv_nsec == UTIME_NOW)
-            atim.microseconds = -1;
-          else if (tsp[0].tv_nsec == UTIME_OMIT)
-            atim.microseconds = -2;
-          else
-            TIMESPEC_TO_TIME_VALUE (&atim, &(tsp[0]));
-          if (tsp[1].tv_nsec == UTIME_NOW)
-            mtim.microseconds = -1;
-          else if (tsp[1].tv_nsec == UTIME_OMIT)
-            mtim.microseconds = -2;
-          else
-            TIMESPEC_TO_TIME_VALUE (&mtim, &(tsp[1]));
-        }
+      utime_tvalue_from_tspec (tsp, &atim, &mtim);
 
       err = HURD_DPORT_USE (fd, __file_utimes (port, atim, mtim));
   }
diff --git a/sysdeps/mach/hurd/utimes.c b/sysdeps/mach/hurd/futimesat.c
similarity index 82%
copy from sysdeps/mach/hurd/utimes.c
copy to sysdeps/mach/hurd/futimesat.c
index 25e4753..99c4c63 100644
--- a/sysdeps/mach/hurd/utimes.c
+++ b/sysdeps/mach/hurd/futimesat.c
@@ -19,26 +19,26 @@
 #include <errno.h>
 #include <stddef.h>
 #include <hurd.h>
+#include <hurd/fd.h>
 
 #include "utime-helper.c"
 
-/* Change the access time of FILE to TVP[0] and
+/* Change the access time of FILE relative to FD to TVP[0] and
    the modification time of FILE to TVP[1].  */
 int
-__utimes (const char *file, const struct timeval tvp[2])
+futimesat (int fd, const char *file, const struct timeval tvp[2])
 {
   error_t err;
   file_t port;
 
-  port = __file_name_lookup (file, 0, 0);
+  port = __file_name_lookup_at (fd, 0, file, 0, 0);
   if (port == MACH_PORT_NULL)
     return -1;
 
-  err = hurd_futimens (port, tvp);
+  err = hurd_futimes (port, tvp);
 
   __mach_port_deallocate (__mach_task_self (), port);
   if (err)
     return __hurd_fail (err);
   return 0;
 }
-weak_alias (__utimes, utimes)
diff --git a/sysdeps/mach/hurd/lutimes.c b/sysdeps/mach/hurd/lutimes.c
index 23b00c1..375ab3f 100644
--- a/sysdeps/mach/hurd/lutimes.c
+++ b/sysdeps/mach/hurd/lutimes.c
@@ -36,7 +36,7 @@ __lutimes (const char *file, const struct timeval tvp[2])
   if (port == MACH_PORT_NULL)
     return -1;
 
-  err = hurd_futimens (port, tvp);
+  err = hurd_futimes (port, tvp);
 
   __mach_port_deallocate (__mach_task_self (), port);
   if (err)
diff --git a/sysdeps/mach/hurd/utime-helper.c b/sysdeps/mach/hurd/utime-helper.c
index 357dfe9..6aed331 100644
--- a/sysdeps/mach/hurd/utime-helper.c
+++ b/sysdeps/mach/hurd/utime-helper.c
@@ -62,7 +62,7 @@ utime_tvalue_from_tval (const struct timeval tvp[2],
 
 /* Changes the access time of the file behind PORT using a timeval array.  */
 static inline error_t
-hurd_futimens (const file_t port, const struct timeval tvp[2])
+hurd_futimes (const file_t port, const struct timeval tvp[2])
 {
   error_t err;
   struct timespec atime, mtime;
@@ -82,3 +82,73 @@ hurd_futimens (const file_t port, const struct timeval tvp[2])
 
   return err;
 }
+
+/* Initializes atime/mtime timespec structures from an array of timespec.  */
+static inline void
+utime_ts_from_tspec (const struct timespec tsp[2],
+                     struct timespec *atime, struct timespec *mtime)
+{
+  if (tsp == NULL)
+    {
+      /* Setting the number of nanoseconds to UTIME_NOW tells the
+         underlying filesystems to use the current time.  */
+      atime->tv_sec = 0;
+      atime->tv_nsec = UTIME_NOW;
+      mtime->tv_sec = 0;
+      mtime->tv_nsec = UTIME_NOW;
+    }
+  else
+    {
+      *atime = tsp[0];
+      *mtime = tsp[1];
+    }
+}
+
+/* Initializes atime/mtime time_value_t structures from an array of timespec.  */
+static inline void
+utime_tvalue_from_tspec (const struct timespec tsp[2],
+                         time_value_t *atime, time_value_t *mtime)
+{
+  if (tsp == NULL)
+    /* Setting the number of microseconds to `-1' tells the
+       underlying filesystems to use the current time.  */
+    atime->microseconds = mtime->microseconds = -1;
+  else
+    {
+      if (tsp[0].tv_nsec == UTIME_NOW)
+	atime->microseconds = -1;
+      else if (tsp[0].tv_nsec == UTIME_OMIT)
+	atime->microseconds = -2;
+      else
+	TIMESPEC_TO_TIME_VALUE (atime, &(tsp[0]));
+      if (tsp[1].tv_nsec == UTIME_NOW)
+	mtime->microseconds = -1;
+      else if (tsp[1].tv_nsec == UTIME_OMIT)
+	mtime->microseconds = -2;
+      else
+	TIMESPEC_TO_TIME_VALUE (mtime, &(tsp[1]));
+    }
+}
+
+/* Changes the access time of the file behind PORT using a timespec array.  */
+static inline error_t
+hurd_futimens (const file_t port, const struct timespec tsp[2])
+{
+  error_t err;
+  struct timespec atime, mtime;
+
+  utime_ts_from_tspec (tsp, &atime, &mtime);
+
+  err = __file_utimens (port, atime, mtime);
+
+  if (err == MIG_BAD_ID || err == EOPNOTSUPP)
+    {
+      time_value_t atim, mtim;
+
+      utime_tvalue_from_tspec (tsp, &atim, &mtim);
+
+      err = __file_utimes (port, atim, mtim);
+    }
+
+  return err;
+}
diff --git a/sysdeps/mach/hurd/utimes.c b/sysdeps/mach/hurd/utimensat.c
similarity index 71%
copy from sysdeps/mach/hurd/utimes.c
copy to sysdeps/mach/hurd/utimensat.c
index 25e4753..ac9bc53 100644
--- a/sysdeps/mach/hurd/utimes.c
+++ b/sysdeps/mach/hurd/utimensat.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
+/* Change access and modification times of open file.  Hurd version.
+   Copyright (C) 1991-2018 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -19,26 +20,27 @@
 #include <errno.h>
 #include <stddef.h>
 #include <hurd.h>
+#include <hurd/fd.h>
 
 #include "utime-helper.c"
 
-/* Change the access time of FILE to TVP[0] and
-   the modification time of FILE to TVP[1].  */
+/* Change the access time of FILE to TSP[0] and
+   the modification time of FILE to TSP[1].  */
 int
-__utimes (const char *file, const struct timeval tvp[2])
+utimensat (int fd, const char *file, const struct timespec tsp[2],
+	   int flags)
 {
   error_t err;
   file_t port;
 
-  port = __file_name_lookup (file, 0, 0);
+  port = __file_name_lookup_at (fd, flags, file, 0, 0);
   if (port == MACH_PORT_NULL)
     return -1;
 
-  err = hurd_futimens (port, tvp);
+  err = hurd_futimens (port, tsp);
 
   __mach_port_deallocate (__mach_task_self (), port);
   if (err)
     return __hurd_fail (err);
   return 0;
 }
-weak_alias (__utimes, utimes)
diff --git a/sysdeps/mach/hurd/utimes.c b/sysdeps/mach/hurd/utimes.c
index 25e4753..fa8a792 100644
--- a/sysdeps/mach/hurd/utimes.c
+++ b/sysdeps/mach/hurd/utimes.c
@@ -34,7 +34,7 @@ __utimes (const char *file, const struct timeval tvp[2])
   if (port == MACH_PORT_NULL)
     return -1;
 
-  err = hurd_futimens (port, tvp);
+  err = hurd_futimes (port, tvp);
 
   __mach_port_deallocate (__mach_task_self (), port);
   if (err)

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=bbe762d1e596d7f5a1cd560a229387cb856916e0

commit bbe762d1e596d7f5a1cd560a229387cb856916e0
Author: Flávio Cruz <flaviocruz@gmail.com>
Date:   Mon Mar 5 23:25:00 2018 +0100

    hurd: Define and pass UTIME_NOW and UTIME_OMIT to new file_utimens RPC
    
    	* sysdeps/mach/hurd/bits/stat.h [__USE_ATFILE] (UTIME_NOW,
    	UTIME_OMIT): New macros.
    	* sysdeps/mach/hurd/futimens.c (__futimens): Try to use __file_utimens
    	before reverting to converting time spec to time value and calling
    	__file_utimes.
    	* sysdeps/mach/hurd/utime-helper.c: New file.
    	* sysdeps/mach/hurd/futimes.c: Include "utime-helper.c".
    	(__futimes): Try to use utime_ts_from_tval and __file_utimens before
    	reverting to utime_tvalue_from_tval and __file_utimes.
    	* sysdeps/mach/hurd/lutimes.c: Include "utime-helper.c".
    	(__lutimes): Just call hurd_futimens after lookup.
    	* sysdeps/mach/hurd/utimes.c: Likewise.

diff --git a/ChangeLog b/ChangeLog
index f586c3f..989881e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2018-03-05  Flávio Cruz  <flaviocruz@gmail.com>
+
+	* sysdeps/mach/hurd/bits/stat.h [__USE_ATFILE] (UTIME_NOW,
+	UTIME_OMIT): New macros.
+	* sysdeps/mach/hurd/futimens.c (__futimens): Try to use __file_utimens
+	before reverting to converting time spec to time value and calling
+	__file_utimes.
+	* sysdeps/mach/hurd/utime-helper.c: New file.
+	* sysdeps/mach/hurd/futimes.c: Include "utime-helper.c".
+	(__futimes): Try to use utime_ts_from_tval and __file_utimens before
+	reverting to utime_tvalue_from_tval and __file_utimes.
+	* sysdeps/mach/hurd/lutimes.c: Include "utime-helper.c".
+	(__lutimes): Just call hurd_futimens after lookup.
+	* sysdeps/mach/hurd/utimes.c: Likewise.
+
 2018-03-05  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	* bits/sigaction.h: Add include guard.
diff --git a/sysdeps/mach/hurd/bits/stat.h b/sysdeps/mach/hurd/bits/stat.h
index 7296cd2..e354a05 100644
--- a/sysdeps/mach/hurd/bits/stat.h
+++ b/sysdeps/mach/hurd/bits/stat.h
@@ -244,6 +244,11 @@ struct stat64
 # define SF_NOUNLINK	0x00100000	/* file may not be removed or renamed */
 # define SF_SNAPSHOT	0x00200000	/* snapshot inode */
 
+#ifdef __USE_ATFILE
+# define UTIME_NOW  -1 /* corresponds to the current time */
+# define UTIME_OMIT -2 /* target time is omitted */
+#endif
+
 __BEGIN_DECLS
 
 /* Set file flags for FILE to FLAGS.  */
diff --git a/sysdeps/mach/hurd/futimens.c b/sysdeps/mach/hurd/futimens.c
index 44ba7f1..4a8b0f7 100644
--- a/sysdeps/mach/hurd/futimens.c
+++ b/sysdeps/mach/hurd/futimens.c
@@ -27,24 +27,53 @@
 int
 __futimens (int fd, const struct timespec tsp[2])
 {
-  time_value_t atime, mtime;
+  struct timespec atime, mtime;
   error_t err;
 
   if (tsp == NULL)
     {
-      /* Setting the number of microseconds to `-1' tells the
+      /* Setting the number of nanoseconds to UTIME_NOW tells the
          underlying filesystems to use the current time.  */
-      atime.microseconds = mtime.microseconds = -1;
+      atime.tv_sec = 0;
+      atime.tv_nsec = UTIME_NOW;
+      mtime.tv_sec = 0;
+      mtime.tv_nsec = UTIME_NOW;
     }
   else
     {
-      atime.seconds = tsp[0].tv_sec;
-      atime.microseconds = tsp[0].tv_nsec / 1000;
-      mtime.seconds = tsp[1].tv_sec;
-      mtime.microseconds = tsp[1].tv_nsec / 1000;
+      atime = tsp[0];
+      mtime = tsp[1];
     }
 
-  err = HURD_DPORT_USE (fd, __file_utimes (port, atime, mtime));
+  err = HURD_DPORT_USE (fd, __file_utimens (port, atime, mtime));
+
+  if (err == MIG_BAD_ID || err == EOPNOTSUPP)
+    {
+      time_value_t atim, mtim;
+
+      if (tsp == NULL)
+        /* Setting the number of microseconds to `-1' tells the
+           underlying filesystems to use the current time.  */
+        atim.microseconds = mtim.microseconds = -1;
+      else
+        {
+          if (tsp[0].tv_nsec == UTIME_NOW)
+            atim.microseconds = -1;
+          else if (tsp[0].tv_nsec == UTIME_OMIT)
+            atim.microseconds = -2;
+          else
+            TIMESPEC_TO_TIME_VALUE (&atim, &(tsp[0]));
+          if (tsp[1].tv_nsec == UTIME_NOW)
+            mtim.microseconds = -1;
+          else if (tsp[1].tv_nsec == UTIME_OMIT)
+            mtim.microseconds = -2;
+          else
+            TIMESPEC_TO_TIME_VALUE (&mtim, &(tsp[1]));
+        }
+
+      err = HURD_DPORT_USE (fd, __file_utimes (port, atim, mtim));
+  }
+
   return err ? __hurd_dfail (fd, err) : 0;
 }
 weak_alias (__futimens, futimens)
diff --git a/sysdeps/mach/hurd/futimes.c b/sysdeps/mach/hurd/futimes.c
index cc2a68f..1b521e3 100644
--- a/sysdeps/mach/hurd/futimes.c
+++ b/sysdeps/mach/hurd/futimes.c
@@ -22,29 +22,29 @@
 #include <hurd.h>
 #include <hurd/fd.h>
 
+#include "utime-helper.c"
+
 /* Change the access time of FD to TVP[0] and
    the modification time of FD to TVP[1].  */
 int
 __futimes (int fd, const struct timeval tvp[2])
 {
-  union tv
-  {
-    struct timeval tv;
-    time_value_t tvt;
-  };
-  const union tv *u = (const union tv *) tvp;
-  union tv nulltv[2];
+  struct timespec atime, mtime;
   error_t err;
 
-  if (tvp == NULL)
+  utime_ts_from_tval (tvp, &atime, &mtime);
+
+  err = HURD_DPORT_USE (fd, __file_utimens (port, atime, mtime));
+
+  if (err == EMIG_BAD_ID || err == EOPNOTSUPP)
     {
-      /* Setting the number of microseconds to `-1' tells the
-         underlying filesystems to use the current time.  */
-      nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
-      u = nulltv;
+      time_value_t atim, mtim;
+
+      utime_tvalue_from_tval (tvp, &atim, &mtim);
+
+      err = HURD_DPORT_USE (fd, __file_utimes (port, atim, mtim));
     }
 
-  err = HURD_DPORT_USE (fd, __file_utimes (port, u[0].tvt, u[1].tvt));
   return err ? __hurd_dfail (fd, err) : 0;
 }
 weak_alias (__futimes, futimes)
diff --git a/sysdeps/mach/hurd/lutimes.c b/sysdeps/mach/hurd/lutimes.c
index e6b0f04..23b00c1 100644
--- a/sysdeps/mach/hurd/lutimes.c
+++ b/sysdeps/mach/hurd/lutimes.c
@@ -22,33 +22,22 @@
 #include <hurd.h>
 #include <fcntl.h>
 
+#include "utime-helper.c"
+
 /* Change the access time of FILE to TVP[0] and
    the modification time of FILE to TVP[1].  */
 int
 __lutimes (const char *file, const struct timeval tvp[2])
 {
-  union tv
-  {
-    struct timeval tv;
-    time_value_t tvt;
-  };
-  const union tv *u = (const union tv *) tvp;
-  union tv nulltv[2];
   error_t err;
   file_t port;
 
-  if (tvp == NULL)
-    {
-      /* Setting the number of microseconds to `-1' tells the
-         underlying filesystems to use the current time.  */
-      nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
-      u = nulltv;
-    }
-
   port = __file_name_lookup (file, O_NOLINK, 0);
   if (port == MACH_PORT_NULL)
     return -1;
-  err = __file_utimes (port, u[0].tvt, u[1].tvt);
+
+  err = hurd_futimens (port, tvp);
+
   __mach_port_deallocate (__mach_task_self (), port);
   if (err)
     return __hurd_fail (err);
diff --git a/sysdeps/mach/hurd/utime-helper.c b/sysdeps/mach/hurd/utime-helper.c
new file mode 100644
index 0000000..357dfe9
--- /dev/null
+++ b/sysdeps/mach/hurd/utime-helper.c
@@ -0,0 +1,84 @@
+/* Helpers for utimes/utimens conversions.
+   Copyright (C) 2015-2018 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <hurd/hurd_types.h>
+#include <stddef.h>
+#include <sys/time.h>
+
+/* Initializes atime/mtime timespec structures from an array of timeval.  */
+static inline void
+utime_ts_from_tval (const struct timeval tvp[2],
+                    struct timespec *atime, struct timespec *mtime)
+{
+  if (tvp == NULL)
+    {
+      /* Setting the number of nanoseconds to UTIME_NOW tells the
+         underlying filesystems to use the current time.  */
+      atime->tv_sec = 0;
+      atime->tv_nsec = UTIME_NOW;
+      mtime->tv_sec = 0;
+      mtime->tv_nsec = UTIME_NOW;
+    }
+  else
+    {
+      TIMEVAL_TO_TIMESPEC (&tvp[0], atime);
+      TIMEVAL_TO_TIMESPEC (&tvp[1], mtime);
+    }
+}
+
+/* Initializes atime/mtime time_value_t structures from an array of timeval.  */
+static inline void
+utime_tvalue_from_tval (const struct timeval tvp[2],
+                        time_value_t *atime, time_value_t *mtime)
+{
+  if (tvp == NULL)
+    /* Setting the number of microseconds to `-1' tells the
+       underlying filesystems to use the current time.  */
+    atime->microseconds = mtime->microseconds = -1;
+  else
+    {
+      atime->seconds = tvp[0].tv_sec;
+      atime->microseconds = tvp[0].tv_usec;
+      mtime->seconds = tvp[1].tv_sec;
+      mtime->microseconds = tvp[1].tv_usec;
+    }
+}
+
+/* Changes the access time of the file behind PORT using a timeval array.  */
+static inline error_t
+hurd_futimens (const file_t port, const struct timeval tvp[2])
+{
+  error_t err;
+  struct timespec atime, mtime;
+
+  utime_ts_from_tval (tvp, &atime, &mtime);
+
+  err = __file_utimens (port, atime, mtime);
+
+  if (err == MIG_BAD_ID || err == EOPNOTSUPP)
+    {
+      time_value_t atim, mtim;
+
+      utime_tvalue_from_tval (tvp, &atim, &mtim);
+
+      err = __file_utimes (port, atim, mtim);
+    }
+
+  return err;
+}
diff --git a/sysdeps/mach/hurd/utimes.c b/sysdeps/mach/hurd/utimes.c
index 2f7c8c2..25e4753 100644
--- a/sysdeps/mach/hurd/utimes.c
+++ b/sysdeps/mach/hurd/utimes.c
@@ -20,33 +20,22 @@
 #include <stddef.h>
 #include <hurd.h>
 
+#include "utime-helper.c"
+
 /* Change the access time of FILE to TVP[0] and
    the modification time of FILE to TVP[1].  */
 int
 __utimes (const char *file, const struct timeval tvp[2])
 {
-  union tv
-  {
-    struct timeval tv;
-    time_value_t tvt;
-  };
-  const union tv *u = (const union tv *) tvp;
-  union tv nulltv[2];
   error_t err;
   file_t port;
 
-  if (tvp == NULL)
-    {
-      /* Setting the number of microseconds to `-1' tells the
-         underlying filesystems to use the current time.  */
-      nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
-      u = nulltv;
-    }
-
   port = __file_name_lookup (file, 0, 0);
   if (port == MACH_PORT_NULL)
     return -1;
-  err = __file_utimes (port, u[0].tvt, u[1].tvt);
+
+  err = hurd_futimens (port, tvp);
+
   __mach_port_deallocate (__mach_task_self (), port);
   if (err)
     return __hurd_fail (err);

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                        |   29 +++++++
 sysdeps/mach/hurd/bits/stat.h    |    5 +
 sysdeps/mach/hurd/futimens.c     |   28 ++++----
 sysdeps/mach/hurd/futimes.c      |   26 +++---
 sysdeps/mach/hurd/futimesat.c    |   44 +++++++++++
 sysdeps/mach/hurd/lutimes.c      |   21 +----
 sysdeps/mach/hurd/utime-helper.c |  154 ++++++++++++++++++++++++++++++++++++++
 sysdeps/mach/hurd/utimensat.c    |   46 +++++++++++
 sysdeps/mach/hurd/utimes.c       |   21 +----
 9 files changed, 315 insertions(+), 59 deletions(-)
 create mode 100644 sysdeps/mach/hurd/futimesat.c
 create mode 100644 sysdeps/mach/hurd/utime-helper.c
 create mode 100644 sysdeps/mach/hurd/utimensat.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]