浏览代码

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.
Paul Eggert 4 年之前
父节点
当前提交
daf634c44e
共有 1 个文件被更改,包括 4 次插入4 次删除
  1. 4 4
      src/buffer.c

+ 4 - 4
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;
 }