From: Paul Eggert Date: Mon, 1 Mar 2021 07:21:27 +0000 (-0800) Subject: Pacify --enable-gcc-warnings -flto -fanalyzer X-Git-Tag: v1.35~116 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=daf634c44e2714c7525e6c552c5a5adc87cba887;p=thirdparty%2Ftar.git Pacify --enable-gcc-warnings -flto -fanalyzer With GCC 10.2.1, ‘./configure --enable-gcc-warnings CFLAGS='-O2 -flto -fanalyzer' issued a false alarm about uninitialized variable use. Pacify GCC by using a variant of the code. * src/buffer.c (zip_program): Omit last placeholder entry. (n_zip_programs): New constant. (find_zip_program): Use it instead of placeholder. (first_decompress_program): Set *PSTATE to maximum value if skipping the table. This avoids confusing gcc -flto into thinking *PSTATE is used uninitialized. (next_decompress_program): Simplify now that *PSTATE is maximal when skipping. --- diff --git a/src/buffer.c b/src/buffer.c index a5e74de7..433cb594 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -328,15 +328,15 @@ static struct zip_program zip_program[] = { { ct_lzop, LZOP_PROGRAM, "--lzop" }, { ct_xz, XZ_PROGRAM, "-J" }, { ct_zstd, ZSTD_PROGRAM, "--zstd" }, - { ct_none } }; +enum { n_zip_programs = sizeof zip_program / sizeof *zip_program }; static struct zip_program const * find_zip_program (enum compress_type type, int *pstate) { int i; - for (i = *pstate; zip_program[i].type != ct_none; i++) + for (i = *pstate; i < n_zip_programs; i++) { if (zip_program[i].type == type) { @@ -353,6 +353,8 @@ first_decompress_program (int *pstate) { struct zip_program const *zp; + *pstate = n_zip_programs; + if (use_compress_program_option) return use_compress_program_option; @@ -369,8 +371,6 @@ next_decompress_program (int *pstate) { struct zip_program const *zp; - if (use_compress_program_option) - return NULL; zp = find_zip_program (archive_compression_type, pstate); return zp ? zp->program : NULL; }