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.
View this message in rfc822 format
From: Jim Meyering <jim <at> meyering.net> To: 29204 <at> debbugs.gnu.org Subject: bug#29204: 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
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.