Denis Excoffier wrote: > On Mon, Mar 15, 2010 at 07:26:59PM -0600, Eric Blake wrote: >>> On 03/15/2010 09:35 AM, Denis Excoffier wrote: >>> > >>> > Hello, >>> > >>> > It seems that on Cygwin, the `file modification time in Unix > format' of >>> > the output format is not set properly. >>> >>> Please report this to the cygwin list; it is quite likely that the > bug >>> lies either in cygwin1.dll or in the particular port of gzip to > cygwin, >>> rather than upstream. > > This has been reported to the cygwin list (see > http://cygwin.com/ml/cygwin/2010-03/msg00549.html). In her > answer, Corinna Vinschen states (implicitly) that you cannot assume > that the st_mtime of a pipe is not "artificially" forged. > > If i understand correctly the file `gzip.c' lines 625 to 634 > (gzip-1.4.tar.gz), a call to `time_t time()' has to be added around.
Thanks for the report. Here's a proposed patch. As you know, it should make no difference on Linux (other than the additional syscall). Can you confirm that it solves the problem on Cygwin? >From 8415ef4cebf510f279c7e1b9f641ac8d8abfe0ed Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Fri, 19 Mar 2010 18:09:20 +0100 Subject: [PATCH] * gzip.c: Include "timespec.h". (treat_stdin): Use st_mtime only from a regular file. This matters at least on Cygwin 1.7.1-1, for which stdin gets the mtime of /dev/null, rather than the gzip-documented-for-pipes "current time". Reported by Denis Excoffier. --- THANKS | 1 + gzip.c | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletions(-) diff --git a/THANKS b/THANKS index b0833e5..a69f832 100644 --- a/THANKS +++ b/THANKS @@ -74,6 +74,7 @@ Paul Eggert egg...@cs.ucla.edu Enami en...@sys.ptg.sony.co.jp Kristoffer Eriksson s...@pkmab.se Daniel Eriksson m91...@bellatrix.tdb.uu.se +Denis Excoffier 3.1...@free.fr Rik Faith fa...@cs.unc.edu Larry Fahnoe fah...@c1mpls.mn.org Cristian Ferretti c...@poincare.mat.puc.cl diff --git a/gzip.c b/gzip.c index d1105e5..41322ec 100644 --- a/gzip.c +++ b/gzip.c @@ -67,6 +67,7 @@ static char const *const license_msg[] = { #include "gzip.h" #include "lzw.h" #include "revision.h" +#include "timespec.h" #include "fcntl-safer.h" #include "getopt.h" @@ -648,7 +649,12 @@ local void treat_stdin() ifile_size = S_ISREG (istat.st_mode) ? istat.st_size : -1; time_stamp.tv_nsec = -1; if (!no_time || list) - time_stamp = get_stat_mtime (&istat); + { + if (S_ISREG (istat.st_mode)) + time_stamp = get_stat_mtime (&istat); + else + gettime (&time_stamp); + } clear_bufs(); /* clear input and output buffers */ to_stdout = 1; -- 1.7.0.2.455.g91132