From: Jim Meyering <meyering@fb.com>
Date: Wed, 5 Oct 2016 16:13:55 +0000 (-0700)
Subject: utimecmp: avoid new GCC 7 warning from -Wbool-operation
X-Git-Tag: v1.0~6617
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=d7ccbff42ce581fac951d9ac1579f253e3cbd2e2;p=gnulib.git

utimecmp: avoid new GCC 7 warning from -Wbool-operation

Testing this module would fail when using GCC 7 like this:
$ CFLAGS='-O -Werror=bool-operation' ./gnulib-tool --create-testdir \
  --dir=/tmp/x --with-tests --test utimecmp
../../gllib/utimecmp.c: In function ‘utimecmp’:
../../gllib/utimecmp.c:291:36: error: ‘~’ on a boolean expression \
  [-Werror=bool-operation]
                 time_t s = src_s & ~ (res == 2 * BILLION);
                                    ^
../../gllib/utimecmp.c:370:16: error: ‘~’ on a boolean expression \
  [-Werror=bool-operation]
       src_s &= ~ (res == 2 * BILLION);
                ^
* lib/utimecmp.c (utimecmp): Do not apply "~" to a boolean.
Instead, make it explicit that we intend to apply it to 0 or 1.
---

diff --git a/ChangeLog b/ChangeLog
index 93f83e6bed..7b04177028 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2016-10-05  Jim Meyering  <meyering@fb.com>
+
+	utimecmp: avoid new GCC 7 warning from -Wbool-operation
+	Testing this module would fail when using GCC 7 like this:
+	$ CFLAGS='-O -Werror=bool-operation' ./gnulib-tool --create-testdir \
+	  --dir=/tmp/x --with-tests --test utimecmp
+	../../gllib/utimecmp.c: In function ‘utimecmp’:
+	../../gllib/utimecmp.c:291:36: error: ‘~’ on a boolean expression \
+	  [-Werror=bool-operation]
+	                 time_t s = src_s & ~ (res == 2 * BILLION);
+	                                    ^
+	../../gllib/utimecmp.c:370:16: error: ‘~’ on a boolean expression \
+	  [-Werror=bool-operation]
+	       src_s &= ~ (res == 2 * BILLION);
+	                ^
+	* lib/utimecmp.c (utimecmp): Do not apply "~" to a boolean.
+	Instead, make it explicit that we intend to apply it to 0 or 1.
+
 2016-10-03  Pádraig Brady  <P@draigBrady.com>
 
 	quotearg: minimize shell quoting using double quotes
diff --git a/lib/utimecmp.c b/lib/utimecmp.c
index ac3d626288..c2e30579d6 100644
--- a/lib/utimecmp.c
+++ b/lib/utimecmp.c
@@ -288,7 +288,7 @@ utimecmp (char const *dst_name,
                  to interrogate the file system to deduce the exact time
                  stamp resolution; return the answer directly.  */
               {
-                time_t s = src_s & ~ (res == 2 * BILLION);
+                time_t s = src_s & ~ (res == 2 * BILLION ? 1 : 0);
                 if (src_s < dst_s || (src_s == dst_s && src_ns <= dst_ns))
                   return 1;
                 if (dst_s < s
@@ -367,7 +367,7 @@ utimecmp (char const *dst_name,
         }
 
       /* Truncate the source's time stamp according to the resolution.  */
-      src_s &= ~ (res == 2 * BILLION);
+      src_s &= ~ (res == 2 * BILLION ? 1 : 0);
       src_ns -= src_ns % res;
     }