Include utimens.h.
authorJim Meyering <jim@meyering.net>
Sat, 9 Aug 2003 17:46:13 +0000 (17:46 +0000)
committerJim Meyering <jim@meyering.net>
Sat, 9 Aug 2003 17:46:13 +0000 (17:46 +0000)
(re_protect): Set file timestamps with utimens, not utime.

src/cp.c

index 72c856f..a0e5911 100644 (file)
--- a/src/cp.c
+++ b/src/cp.c
@@ -32,6 +32,7 @@
 #include "dirname.h"
 #include "path-concat.h"
 #include "quote.h"
+#include "utimens.h"
 
 #define ASSIGN_BASENAME_STRDUPA(Dest, File_name)       \
   do                                                   \
@@ -307,16 +308,14 @@ re_protect (const char *const_dst_path, int src_offset,
 
       if (x->preserve_timestamps)
        {
-         struct utimbuf utb;
+         struct timespec timespec[2];
 
-         /* There's currently no interface to set file timestamps with
-            better than 1-second resolution, so discard any fractional
-            part of the source timestamp.  */
+         timespec[0].tv_sec = src_sb.st_atime;
+         timespec[0].tv_nsec = TIMESPEC_NS (src_sb.st_atim);
+         timespec[1].tv_sec = src_sb.st_mtime;
+         timespec[1].tv_nsec = TIMESPEC_NS (src_sb.st_mtim);
 
-         utb.actime = src_sb.st_atime;
-         utb.modtime = src_sb.st_mtime;
-
-         if (utime (dst_path, &utb))
+         if (utimens (dst_path, timespec))
            {
              error (0, errno, _("failed to preserve times for %s"),
                     quote (dst_path));