| http://bugs.gentoo.org/331979 |
| |
| patch by William Throwe <wthrowe@mit.edu> |
| |
| The problem is that a failed match() resets the RSTART variable used to |
| extract filename_no_gz (visible in the trailing context of the patch), |
| so it is important that no more match() commands are attempted after the |
| successful one. Without the scoping, if (for example) the test for .bz2 |
| succeeds, it prevents testing for .lzma, but doesn't prevent testing for |
| .xz. The failing .xz test causes RSTART to be set to zero so |
| filename_no_gz becomes the empty string. |
| |
| --- man-1.6f/src/makewhatis.sh |
| +++ man-1.6f/src/makewhatis.sh |
| @@ -234,7 +234,7 @@ |
| find $mandir/${pages}$i/. -name '*' $findarg0 $findarg -print | $AWK ' |
| |
| function readline() { |
| - if (use_zcat || use_bzcat || use_lzcat || use_xzcat) { |
| + if (use_compression) { |
| result = (pipe_cmd | getline); |
| if (result < 0) { |
| print "Pipe error: " pipe_cmd " " ERRNO > "/dev/stderr"; |
| @@ -249,7 +249,7 @@ |
| } |
| |
| function closeline() { |
| - if (use_zcat || use_bzcat || use_lzcat || use_xzcat) { |
| + if (use_compression) { |
| return close(pipe_cmd); |
| } else { |
| return close(filename); |
| @@ -263,16 +263,20 @@ |
| if (verbose) { |
| print "adding " filename > "/dev/stderr" |
| } |
| - |
| + |
| use_zcat = match(filename,"\\.Z$") || |
| match(filename,"\\.z$") || match(filename,"\\.gz$"); |
| - if (!use_zcat) |
| + if (!use_zcat) { |
| use_bzcat = match(filename,"\\.bz2"); |
| - if(!use_bzcat) |
| - use_lzcat = match(filename,"\\.lzma"); |
| - if(!use_lzcat) |
| - use_xzcat = match(filename,"\\.xz"); |
| - if (use_zcat || use_bzcat || use_lzcat || use_xzcat) { |
| + if (!use_bzcat) { |
| + use_lzcat = match(filename,"\\.lzma"); |
| + if (!use_lzcat) { |
| + use_xzcat = match(filename,"\\.xz"); |
| + } |
| + } |
| + } |
| + use_compression = (use_zcat || use_bzcat || use_lzcat || use_xzcat); |
| + if (use_compression) { |
| filename_no_gz = substr(filename, 0, RSTART - 1); |
| } else { |
| filename_no_gz = filename; |
| @@ -285,7 +289,7 @@ |
| actual_section = section; |
| } |
| sub(/\..*/, "", progname); |
| - if (use_zcat || use_bzcat || use_lzcat || use_xzcat) { |
| + if (use_compression) { |
| if (use_zcat) { |
| pipe_cmd = "zcat \"" filename "\""; |
| } else if (use_bzcat) { |