Hi Pádraig,

I have 2 patches attached.

First, I noticed many instances of three-valued comparisons written
like:

   return (a > b) - (a < b);

I think it will take a bit of thought for new contributors to understand
this. Instead we can use _GL_CMP which does the same thing (and Gnulib
will probably never remove).

A new contributor can grep for the _GL_CMP definition and read the
detailed comment in m4/gnulib-common.m4 or lib/config.h(in)? to
understand it.

After writing that patch, I noticed that building from a tarball will
fail with the following error:

    make[2]: *** No rule to make target 'src/termios.c', needed by 
'src/speedlist.h'.  Stop.
    make[2]: Leaving directory '/tmp/coreutils-9.7.51-10e69'
    make[1]: *** [Makefile:23430: all-recursive] Error 1
    make[1]: Leaving directory '/tmp/coreutils-9.7.51-10e69'
    make: *** [Makefile:9345: all] Error 2

The recent patches to let 'stty' support arbitrary baud rates added
src/speedlist.h which is generated by src/termios.c passed into the C
preprocessor. Therefore it should be added to EXTRA_DIST. Done with the
second patch.

Collin

>From 10e69e75b23247083e62727a74ae624e2778333c Mon Sep 17 00:00:00 2001
Message-ID: <10e69e75b23247083e62727a74ae624e2778333c.1750571130.git.collin.fu...@gmail.com>
From: Collin Funk <collin.fu...@gmail.com>
Date: Sat, 21 Jun 2025 21:50:27 -0700
Subject: [PATCH 1/2] maint: use _GL_CMP instead of handwriting three-valued
 comparisons

* src/comm.c (compare_files): Use _GL_CMP.
* src/join.c (keycmp): Likewise.
* src/ls.c (off_cmp): Likewise.
* src/ptx.c (compare_words, compare_occurs): Likewise.
* src/set-fields.c (compare_ranges): Likewise.
* src/sort.c (compare_random, diff_reversed, compare): Likewise.
---
 src/comm.c       |  3 +--
 src/join.c       |  2 +-
 src/ls.c         |  2 +-
 src/ptx.c        |  5 ++---
 src/set-fields.c |  2 +-
 src/sort.c       | 10 +++++-----
 6 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/src/comm.c b/src/comm.c
index 92be28528..dd61dd9c8 100644
--- a/src/comm.c
+++ b/src/comm.c
@@ -318,8 +318,7 @@ compare_files (char **infiles)
               size_t len = MIN (thisline[0]->length, thisline[1]->length) - 1;
               order = memcmp (thisline[0]->buffer, thisline[1]->buffer, len);
               if (order == 0)
-                order = ((thisline[0]->length > thisline[1]->length)
-                         - (thisline[0]->length < thisline[1]->length));
+                order = _GL_CMP (thisline[0]->length, thisline[1]->length);
             }
         }
 
diff --git a/src/join.c b/src/join.c
index 93ffdafc1..faf402eea 100644
--- a/src/join.c
+++ b/src/join.c
@@ -384,7 +384,7 @@ keycmp (struct line const *line1, struct line const *line2,
 
   if (diff)
     return diff;
-  return (len1 > len2) - (len1 < len2);
+  return _GL_CMP (len1, len2);
 }
 
 /* Check that successive input lines PREV and CURRENT from input file
diff --git a/src/ls.c b/src/ls.c
index bbc1bb2fd..e84e0facf 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -3898,7 +3898,7 @@ cmp_btime (struct fileinfo const *a, struct fileinfo const *b,
 static int
 off_cmp (off_t a, off_t b)
 {
-  return (a > b) - (a < b);
+  return _GL_CMP (a, b);
 }
 
 static int
diff --git a/src/ptx.c b/src/ptx.c
index 8c42db2d2..006eb66af 100644
--- a/src/ptx.c
+++ b/src/ptx.c
@@ -558,7 +558,7 @@ compare_words (const void *void_first, const void *void_second)
         }
     }
 
-  return (first->size > second->size) - (first->size < second->size);
+  return _GL_CMP (first->size, second->size);
 }
 
 /*-----------------------------------------------------------------------.
@@ -576,8 +576,7 @@ compare_occurs (const void *void_first, const void *void_second)
 
   value = compare_words (&first->key, &second->key);
   return (value ? value
-          : ((first->key.start > second->key.start)
-             - (first->key.start < second->key.start)));
+          : _GL_CMP (first->key.start, second->key.start));
 #undef first
 #undef second
 }
diff --git a/src/set-fields.c b/src/set-fields.c
index 0063ed844..31547e4e9 100644
--- a/src/set-fields.c
+++ b/src/set-fields.c
@@ -61,7 +61,7 @@ static int
 compare_ranges (const void *a, const void *b)
 {
   struct field_range_pair const *ap = a, *bp = b;
-  return (ap->lo > bp->lo) - (ap->lo < bp->lo);
+  return _GL_CMP (ap->lo, bp->lo);
 }
 
 /* Reallocate Range Pair entries, with corresponding
diff --git a/src/sort.c b/src/sort.c
index 7af1a2512..4a1fdfd37 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -2295,7 +2295,7 @@ compare_random (char *restrict texta, size_t lena,
             {
               xfrm_diff = memcmp (buf, buf + sizea, MIN (sizea, sizeb));
               if (! xfrm_diff)
-                xfrm_diff = (sizea > sizeb) - (sizea < sizeb);
+                xfrm_diff = _GL_CMP (sizea, sizeb);
             }
         }
     }
@@ -2312,7 +2312,7 @@ compare_random (char *restrict texta, size_t lena,
         {
           xfrm_diff = memcmp (texta, textb, MIN (lena, lenb));
           if (! xfrm_diff)
-            xfrm_diff = (lena > lenb) - (lena < lenb);
+            xfrm_diff = _GL_CMP (lena, lenb);
         }
 
       diff = xfrm_diff;
@@ -2678,7 +2678,7 @@ key_warnings (struct keyfield const *gkey, bool gkey_only)
 static int
 diff_reversed (int diff, bool reversed)
 {
-  return reversed ? (diff < 0) - (diff > 0) : diff;
+  return reversed ? _GL_CMP (0, diff) : diff;
 }
 
 /* Compare two lines A and B trying every key in sequence until there
@@ -2842,7 +2842,7 @@ keycompare (struct line const *a, struct line const *b)
             diff = memcmp (texta, textb, lenmin);
 
           if (! diff)
-            diff = (lena > lenb) - (lena < lenb);
+            diff = _GL_CMP (lena, lenb);
         }
 
       if (diff)
@@ -2915,7 +2915,7 @@ compare (struct line const *a, struct line const *b)
     {
       diff = memcmp (a->text, b->text, MIN (alen, blen));
       if (!diff)
-        diff = (alen > blen) - (alen < blen);
+        diff = _GL_CMP (alen, blen);
     }
 
   return diff_reversed (diff, reverse);
-- 
2.49.0

>From 1e207bfca71aa517d021beebebb82da0e0d2a860 Mon Sep 17 00:00:00 2001
Message-ID: <1e207bfca71aa517d021beebebb82da0e0d2a860.1750571130.git.collin.fu...@gmail.com>
In-Reply-To: <10e69e75b23247083e62727a74ae624e2778333c.1750571130.git.collin.fu...@gmail.com>
References: <10e69e75b23247083e62727a74ae624e2778333c.1750571130.git.collin.fu...@gmail.com>
From: Collin Funk <collin.fu...@gmail.com>
Date: Sat, 21 Jun 2025 22:05:19 -0700
Subject: [PATCH 2/2] build: add src/termios.c to the tarball

* src/local.mk (EXTRA_DIST): Add src/termios.c.
---
 src/local.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/local.mk b/src/local.mk
index 45dffd8bf..d0cf00a7a 100644
--- a/src/local.mk
+++ b/src/local.mk
@@ -73,7 +73,8 @@ EXTRA_DIST +=		\
   src/crctab.c		\
   src/tac-pipe.c	\
   src/extract-magic	\
-  src/speedgen
+  src/speedgen		\
+  src/termios.c
 
 CLEANFILES += $(SCRIPTS)
 
-- 
2.49.0

Reply via email to