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.