I always forget about the special value shortcut for utimes(2) et al.

This is equivalent/simpler/more portable.

ok?

Index: receiver.c
===================================================================
RCS file: /cvs/src/usr.bin/rsync/receiver.c,v
retrieving revision 1.19
diff -u -p -r1.19 receiver.c
--- receiver.c  18 Feb 2019 21:55:27 -0000      1.19
+++ receiver.c  22 Mar 2019 15:59:24 -0000
@@ -47,7 +47,7 @@ rsync_set_metadata(struct sess *sess, in
 {
        uid_t            uid = (uid_t)-1;
        gid_t            gid = (gid_t)-1;
-       struct timespec  tv[2];
+       struct timespec  ts[2];
 
        /*
         * Conditionally adjust identifiers.
@@ -76,13 +76,10 @@ rsync_set_metadata(struct sess *sess, in
        /* Conditionally adjust file modification time. */
 
        if (sess->opts->preserve_times) {
-               struct timeval now;
-
-               gettimeofday(&now, NULL);
-               TIMEVAL_TO_TIMESPEC(&now, &tv[0]);
-               tv[1].tv_sec = f->st.mtime;
-               tv[1].tv_nsec = 0;
-               if (futimens(fd, tv) == -1) {
+               ts[0].tv_nsec = UTIME_NOW;
+               ts[1].tv_sec = f->st.mtime;
+               ts[1].tv_nsec = 0;
+               if (futimens(fd, ts) == -1) {
                        ERR(sess, "%s: futimens", path);
                        return 0;
                }
@@ -108,7 +105,7 @@ rsync_set_metadata_at(struct sess *sess,
 {
        uid_t            uid = (uid_t)-1;
        gid_t            gid = (gid_t)-1;
-       struct timespec  tv[2];
+       struct timespec  ts[2];
 
        /*
         * Conditionally adjust identifiers.
@@ -138,13 +135,10 @@ rsync_set_metadata_at(struct sess *sess,
        /* Conditionally adjust file modification time. */
 
        if (sess->opts->preserve_times) {
-               struct timeval now;
-
-               gettimeofday(&now, NULL);
-               TIMEVAL_TO_TIMESPEC(&now, &tv[0]);
-               tv[1].tv_sec = f->st.mtime;
-               tv[1].tv_nsec = 0;
-               if (utimensat(rootfd, path, tv, AT_SYMLINK_NOFOLLOW) == -1) {
+               ts[0].tv_nsec = UTIME_NOW;
+               ts[1].tv_sec = f->st.mtime;
+               ts[1].tv_nsec = 0;
+               if (utimensat(rootfd, path, ts, AT_SYMLINK_NOFOLLOW) == -1) {
                        ERR(sess, "%s: utimensat", path);
                        return 0;
                }

Reply via email to