GNU bug report logs - #29204
4 build fixes

Previous Next

Package: idutils;

Reported by: Jim Meyering <jim <at> meyering.net>

Date: Wed, 8 Nov 2017 04:05:01 UTC

Severity: normal

Done: Jim Meyering <jim <at> meyering.net>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 29204 in the body.
You can then email your comments to 29204 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-idutils <at> gnu.org:
bug#29204; Package idutils. (Wed, 08 Nov 2017 04:05:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Jim Meyering <jim <at> meyering.net>:
New bug report received and forwarded. Copy sent to bug-idutils <at> gnu.org. (Wed, 08 Nov 2017 04:05:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jim Meyering <jim <at> meyering.net>
To: bug-idutils <at> gnu.org
Subject: 4 build fixes
Date: Tue, 07 Nov 2017 20:04:26 -0800
[Message part 1 (text/plain, inline)]
I've just pushed the following:

[PATCH 1/4] build: fix type-vs-format-string mismatches
[PATCH 2/4] build: address -Wimplicit-fallthrough= warnings
[PATCH 3/4] build: add die.h from coreutils
[PATCH 4/4] lid: fix invalid fallthrough after failed exec

see https://git.sv.gnu.org/cgit/idutils.git or the attached

[idu-build.diff (text/x-patch, inline)]
From e37cd40e6c3101e4fa79fee9262ae435045016e7 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering <at> fb.com>
Date: Tue, 7 Nov 2017 09:29:02 -0800
Subject: [PATCH 1/4] build: fix type-vs-format-string mismatches

* libidu/idread.c (io_read): As above.
* libidu/idu-hash.c (hash_init, hash_print_stats): Likewise.
* libidu/idwrite.c (io_write): Likewise.
* libidu/scanners.c (ARGS): Likewise.
* libidu/walker.c (print_member_file, langs_excluded): Likewise.
* src/lid.c (main): Likewise.
* src/mkid.c (scan_files, report_statistics, summarize): Likewise.
---
 libidu/idread.c   |  2 +-
 libidu/idu-hash.c |  8 ++++----
 libidu/idwrite.c  |  2 +-
 libidu/scanners.c |  8 ++++----
 libidu/walker.c   |  4 ++--
 src/lid.c         |  2 +-
 src/mkid.c        | 26 +++++++++++++-------------
 7 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/libidu/idread.c b/libidu/idread.c
index a6a4b0e..7f34f76 100644
--- a/libidu/idread.c
+++ b/libidu/idread.c
@@ -187,7 +187,7 @@ io_read (FILE *input_FILE, void *addr, unsigned int size, int io_type)
 	  *(unsigned char *)addr = getc (input_FILE);
 	  break;
 	default:
-	  error (EXIT_FAILURE, 0, _("unsupported size in io_read (): %d"), size);
+	  error (EXIT_FAILURE, 0, _("unsupported size in io_read (): %u"), size);
 	}
     }
   else if (io_type == IO_TYPE_STR)
diff --git a/libidu/idu-hash.c b/libidu/idu-hash.c
index c22c02b..8c50a38 100644
--- a/libidu/idu-hash.c
+++ b/libidu/idu-hash.c
@@ -48,7 +48,7 @@ hash_init (struct hash_table* ht, unsigned long size,
   ht->ht_empty_slots = ht->ht_size;
   ht->ht_vec = xcalloc (ht->ht_size, sizeof(struct token *));
   if (ht->ht_vec == 0)
-    error (EXIT_FAILURE, 0, _("can't allocate %ld bytes for hash table: memory exhausted"),
+    error (EXIT_FAILURE, 0, _("can't allocate %lu bytes for hash table: memory exhausted"),
 	   ht->ht_size * sizeof(struct token *));
   ht->ht_capacity = ht->ht_size * 15 / 16; /* 93.75% loading factor */
   ht->ht_fill = 0;
@@ -261,10 +261,10 @@ hash_rehash (struct hash_table* ht)
 void
 hash_print_stats (struct hash_table const *ht, FILE *out_FILE)
 {
-  fprintf (out_FILE, _("Load=%ld/%ld=%.0f%%, "), ht->ht_fill, ht->ht_size,
+  fprintf (out_FILE, _("Load=%lu/%lu=%.0f%%, "), ht->ht_fill, ht->ht_size,
 	   100.0 * (double) ht->ht_fill / (double) ht->ht_size);
-  fprintf (out_FILE, _("Rehash=%d, "), ht->ht_rehashes);
-  fprintf (out_FILE, _("Collisions=%ld/%ld=%.0f%%"), ht->ht_collisions, ht->ht_lookups,
+  fprintf (out_FILE, _("Rehash=%u, "), ht->ht_rehashes);
+  fprintf (out_FILE, _("Collisions=%lu/%lu=%.0f%%"), ht->ht_collisions, ht->ht_lookups,
 	   (ht->ht_lookups
 	    ? (100.0 * (double) ht->ht_collisions / (double) ht->ht_lookups)
 	    : 0));
diff --git a/libidu/idwrite.c b/libidu/idwrite.c
index 9c1f083..0dcdd20 100644
--- a/libidu/idwrite.c
+++ b/libidu/idwrite.c
@@ -155,7 +155,7 @@ io_write (FILE *output_FILE, void *addr, unsigned int size, int io_type)
 	  putc (*(unsigned char *)addr, output_FILE);
 	  break;
 	default:
-	  error (EXIT_FAILURE, 0, _("unsupported size in io_write (): %d"), size);
+	  error (EXIT_FAILURE, 0, _("unsupported size in io_write (): %u"), size);
 	}
     }
   else if (io_type == IO_TYPE_STR)
diff --git a/libidu/scanners.c b/libidu/scanners.c
index 26047eb..03691ea 100644
--- a/libidu/scanners.c
+++ b/libidu/scanners.c
@@ -752,7 +752,7 @@ next:
 	  if (isprint (c))
 	    fprintf (stderr, _("junk: `%c'"), c);
 	  else
-	    fprintf (stderr, _("junk: `\\%03o'"), c);
+	    fprintf (stderr, _("junk: `\\%03o'"), (unsigned) c);
 	}
       ungetc (c, in_FILE);
       *flags |= TOK_LITERAL;
@@ -1021,7 +1021,7 @@ next:
       if (isprint (c))
 	fprintf (stderr, _("junk: `%c'"), c);
       else
-	fprintf (stderr, _("junk: `\\%03o'"), c);
+	fprintf (stderr, _("junk: `\\%03o'"), (unsigned) c);
       goto next;
     }

@@ -1224,7 +1224,7 @@ top:
       if (isprint (c))
 	fprintf (stderr, _("junk: `%c'"), c);
       else
-	fprintf (stderr, _("junk: `\\%03o'"), c);
+	fprintf (stderr, _("junk: `\\%03o'"), (unsigned) c);
       goto top;
     }

@@ -1494,7 +1494,7 @@ top:
       if (isprint (c))
         fprintf (stderr, _("junk: `%c'"), c);
       else
-        fprintf (stderr, _("junk: `\\%03o'"), c);
+        fprintf (stderr, _("junk: `\\%03o'"), (unsigned) c);
       goto top;
     }

diff --git a/libidu/walker.c b/libidu/walker.c
index 0659237..e332305 100644
--- a/libidu/walker.c
+++ b/libidu/walker.c
@@ -467,7 +467,7 @@ print_member_file (struct member_file *member)
 {
   char *file_name = alloca (PATH_MAX);
   absolute_file_name (file_name, member->mf_link);
-  printf ("%ld: %s: %s\n", idh.idh_member_file_table.ht_fill - 1,
+  printf ("%lu: %s: %s\n", idh.idh_member_file_table.ht_fill - 1,
 	  member->mf_lang_args->la_language->lg_name, file_name);
 }

@@ -477,7 +477,7 @@ print_member_file (struct member_file *member)
 static char **langs_included;
 static char **langs_excluded;

-static int
+static int _GL_ATTRIBUTE_PURE
 lang_wanted (char const *lang_name)
 {
   if (langs_excluded)
diff --git a/src/lid.c b/src/lid.c
index b5282d3..7cdc821 100644
--- a/src/lid.c
+++ b/src/lid.c
@@ -456,7 +456,7 @@ main (int argc, char **argv)
   if (ambiguous_prefix_length)
     {
       if (!query_ambiguous_prefix (ambiguous_prefix_length, report_function))
-	fprintf (stderr, _("All identifiers are non-ambiguous within the first %d characters\n"),
+	fprintf (stderr, _("All identifiers are non-ambiguous within the first %u characters\n"),
 		 ambiguous_prefix_length);
     }
   else
diff --git a/src/mkid.c b/src/mkid.c
index d9a351e..51a5a35 100644
--- a/src/mkid.c
+++ b/src/mkid.c
@@ -517,7 +517,7 @@ scan_files (struct idhead const *idhp)
   if (verbose_flag) {
     char offstr[INT_BUFSIZE_BOUND(off_t)];

-    printf ("files=%ld, largest=%s, slots=%lu\n",
+    printf ("files=%lu, largest=%s, slots=%lu\n",
 	    idhp->idh_member_file_table.ht_fill,
 	    offtostr(largest_member_file, offstr),
 	    token_table.ht_size);
@@ -645,25 +645,25 @@ scan_member_file_1 (get_token_func_t get_token, void const *args, FILE *source_F
 static void
 report_statistics (void)
 {
-  printf (_("Name=%ld, "), name_tokens);
-  printf (_("Number=%ld, "), number_tokens);
-  printf (_("String=%ld, "), string_tokens);
-  printf (_("Literal=%ld, "), literal_tokens);
-  printf (_("Comment=%ld\n"), comment_tokens);
-
-  printf (_("Files=%ld, "), idh.idh_files);
-  printf (_("Tokens=%ld, "), occurrences);
-  printf (_("Bytes=%ld Kb, "), input_chars / 1024);
+  printf (_("Name=%lu, "), name_tokens);
+  printf (_("Number=%lu, "), number_tokens);
+  printf (_("String=%lu, "), string_tokens);
+  printf (_("Literal=%lu, "), literal_tokens);
+  printf (_("Comment=%lu\n"), comment_tokens);
+
+  printf (_("Files=%lu, "), idh.idh_files);
+  printf (_("Tokens=%lu, "), occurrences);
+  printf (_("Bytes=%lu Kb, "), input_chars / 1024);
   printf (_("Heap=%llu+%llu Kb, "),
 	  (unsigned long long) ((char *) heap_after_scan
 				- (char *) heap_after_walk) / 1024,
 	  (unsigned long long) ((char *) heap_after_walk
 				- (char *) heap_initial) / 1024);
-  printf (_("Output=%ld (%ld tok, %ld hit)\n"),
+  printf (_("Output=%lu (%lu tok, %lu hit)\n"),
 	  output_length, tokens_length, hits_length);

   hash_print_stats (&token_table, stdout);
-  printf (_(", Freq=%ld/%ld=%.2f\n"), occurrences, token_table.ht_fill,
+  printf (_(", Freq=%lu/%lu=%.2f\n"), occurrences, token_table.ht_fill,
 	  (double) occurrences / (double) token_table.ht_fill);
 }

@@ -863,7 +863,7 @@ summarize (void)
       unsigned long init_size = INIT_TOKENS_SIZE (summary->sum_level);

       if (verbose_flag)
-	printf (_("level %d: %ld/%ld = %.0f%%\n"),
+	printf (_("level %d: %lu/%lu = %.0f%%\n"),
 		summary->sum_level, count, init_size,
 		100.0 * (double) count / (double) init_size);

-- 
2.14.1.729.g59c0ea183


From b4f603f45f1a964faa01440327f970c96e45297a Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering <at> fb.com>
Date: Tue, 7 Nov 2017 09:31:18 -0800
Subject: [PATCH 2/4] build: address -Wimplicit-fallthrough= warnings

* src/mkid.c (FALLTHROUGH): Define.
(main): Mark two case statements as such.
---
 src/mkid.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/mkid.c b/src/mkid.c
index 51a5a35..ca9cfb7 100644
--- a/src/mkid.c
+++ b/src/mkid.c
@@ -45,6 +45,14 @@
 #include "scanners.h"
 #include "iduglobal.h"

+#ifndef FALLTHROUGH
+# if __GNUC__ < 7
+#  define FALLTHROUGH ((void) 0)
+# else
+#  define FALLTHROUGH __attribute__ ((__fallthrough__))
+# endif
+#endif
+
 struct summary
 {
   struct token **sum_tokens;
@@ -275,8 +283,10 @@ main (int argc, char **argv)

 	case 'V':
 	  walker_verbose_flag = 1;
+	  FALLTHROUGH;
 	case 'v':
 	  verbose_flag = 1;
+	  FALLTHROUGH;
 	case 's':
 	  statistics_flag = 1;
 	  break;
-- 
2.14.1.729.g59c0ea183


From 25632036e479b293a0574dbc6b48930336d79bf2 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering <at> fb.com>
Date: Tue, 7 Nov 2017 09:33:33 -0800
Subject: [PATCH 3/4] build: add die.h from coreutils

* src/die.h: New file. From coreutils.
* src/Makefile.am (noinst_HEADERS): Add it.
---
 src/Makefile.am |  2 +-
 src/die.h       | 31 +++++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 src/die.h

diff --git a/src/Makefile.am b/src/Makefile.am
index 8aa82dd..4ce8920 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,7 +1,7 @@
 bin_PROGRAMS = mkid lid fid fnid xtokid aid eid gid
 dist_bin_SCRIPTS = defid

-noinst_HEADERS = lid.h
+noinst_HEADERS = die.h lid.h
 aid_SOURCES = lid.c lid-aid.c
 eid_SOURCES = lid.c lid-eid.c
 gid_SOURCES = lid.c lid-gid.c
diff --git a/src/die.h b/src/die.h
new file mode 100644
index 0000000..8835d80
--- /dev/null
+++ b/src/die.h
@@ -0,0 +1,31 @@
+/* Report an error and exit.
+   Copyright 2016-2017 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   This program 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
+
+#ifndef DIE_H
+# define DIE_H
+
+# include <error.h>
+# include <stdbool.h>
+# include <verify.h>
+
+/* Like 'error (STATUS, ...)', except STATUS must be a nonzero constant.
+   This may pacify the compiler or help it generate better code.  */
+# define die(status, ...) \
+  verify_expr (status, (error (status, __VA_ARGS__), assume (false)))
+
+#endif /* DIE_H */
-- 
2.14.1.729.g59c0ea183


From a0b22c00854ab6953b035e871a95847786699960 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering <at> fb.com>
Date: Tue, 7 Nov 2017 09:41:55 -0800
Subject: [PATCH 4/4] lid: fix invalid fallthrough after failed exec

gcc's -Wimplicit-fallthrough detected a bug: lid would
fall through it's "case 0" after a failed execvp.
* src/lid.c: Include "die.h".
Use "die (EXIT_FAILURE,...", not "error (0,..."
---
 src/lid.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/lid.c b/src/lid.c
index 7cdc821..1f419e6 100644
--- a/src/lid.c
+++ b/src/lid.c
@@ -38,6 +38,7 @@
 #include <error.h>

 #include "closeout.h"
+#include "die.h"
 #include "xnls.h"
 #include "idfile.h"
 #include "iduglobal.h"
@@ -784,7 +785,7 @@ editit:

 	argv[i] = 0;
 	execvp (editor_argv[0], argv);
-	error (0, errno, _("can't exec `%s'"), editor_argv[0]);
+	die (EXIT_FAILURE, errno, _("can't exec `%s'"), editor_argv[0]);
       }

     default:
-- 
2.14.1.729.g59c0ea183


bug closed, send any further explanations to 29204 <at> debbugs.gnu.org and Jim Meyering <jim <at> meyering.net> Request was from Jim Meyering <jim <at> meyering.net> to control <at> debbugs.gnu.org. (Wed, 08 Nov 2017 14:28:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 07 Dec 2017 12:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 7 years and 279 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.