Subject: Re: gzip warning about > 4GB breaks amanda
To: Greg Troxel <gdt@ir.bbn.com>
From: Mike M. Volokhov <mishka@apk.od.ua>
List: current-users
Date: 11/18/2005 17:48:03
On 18 Nov 2005 10:14:30 -0500
Greg Troxel <gdt@ir.bbn.com> wrote:

> Thanks for the PR pointers.
> 
> With the patch I posted, amanda saved the gzipped dump on tape, but
> gave me 'strange' output, similar to the report in PR 31346 (complete
> with erroneously including errno text; I should have used warnx rather
> than warn).
> 
> Christian Biere points out that RFC1952 is unambiguous.  It specifies
> that the ISIZE is the input size modulo 2^32.  Thus our gzip simply
> follows the standard.  I concur with Christian that there should not
> be a warning, and with Hauke Fath that the warning produces extraneous
> (and harmful) amanda output.
> 
> So, here's a new proposed patch, which prints an improved warning
> text only in verbose mode.  Plus, it removes the entire message from
> SMALL.

Fine with me. If no one objects, please commit it at last.

IMHO this should be also described on man page in BUGS section. Please
also note that "gzip -t" will show modulo 2^32, and *not* real size,
which can be also harmful.

> Index: gzip.c
> ===================================================================
> RCS file: /cvsroot/src/usr.bin/gzip/gzip.c,v
> retrieving revision 1.77
> diff -u -r1.77 gzip.c
> --- gzip.c	20 Sep 2005 05:12:15 -0000	1.77
> +++ gzip.c	18 Nov 2005 15:10:20 -0000
> @@ -639,8 +639,16 @@
>  		 (int)(in_tot >> 24) & 0xff);
>  	if (i != 8)
>  		maybe_err("snprintf");
> -	if (in_tot > 0xffffffff)
> -		maybe_warn("input file size >= 4GB cannot be saved");
> +#ifndef SMALL
> +	if (in_tot > 0xffffffff && vflag)
> +		/*
> +		 * RFC1952 specifies that ISIZE is modulo 2^32, so
> +		 * don't note this unless in verbose mode.  (Note that
> +		 * amanda reports any such output, which is

Possible better as "Note that some software, like amanda, reports ..."

> +		 * distracting and therefore harmful.)
> +		 */
> +		warnx("input file size >= 4GB stored modulo 2^32");
> +#endif
>  	if (write(out, outbufp, i) != i) {
>  		maybe_warn("write");
>  		in_tot = -1;
> 
>   

--
Mishka.