This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: [Patch] patch -Z not working if timestamp contains seconds >=59.5
- From: Christian Franke <Christian dot Franke at t-online dot de>
- To: cygwin at cygwin dot com
- Date: Tue, 25 Apr 2006 23:33:52 +0200
- Subject: Re: [Patch] patch -Z not working if timestamp contains seconds >=59.5
- References: <054c01c668a4$554924e0$a501a8c0@CAM.ARTIMI.COM>
Dave Korn wrote:
...
diff -rup patch-2.5.8-8.orig/partime.c patch-2.5.8-8/partime.c
--- patch-2.5.8-8.orig/partime.c 2002-12-15 21:37:32.001000000 +0100
+++ patch-2.5.8-8/partime.c 2006-04-25 12:14:59.797168500 +0200
@@ -753,6 +753,8 @@ parse_pattern_letter (s, c, t)
int frac;
s = parse_decimal (s, 2, 0, 60, 1, &t->tm.tm_sec, &frac);
t->tm.tm_sec += frac;
+ if (t->tm.tm_sec > 59)
+ t->tm.tm_sec = 59;
}
break;
I'm not sure if rounding errors can be a good idea when makefiles might be
involved. Why isn't your code propagating the carry, i.e. setting tm_sec to
zero and incrmenting the minutes?
... and then propagate the carry to hours, to days, ...,
finally handle leap years and invalid local times during DST change?
The patch simply changes rounding mode for a small interval from
round-to-nearest to round-down.
This IMO does not add any new monotonicity issues.
As an alternative, round-down (ignore "frac") could be used always.
Then timestamps would be consistent with tar, at least on Cygwin.
In the current versions of patch and tar, a file with NTFS timestamp of e.g.
"12:00:00.7" is transfered as "12:00:01" by patch, but "12:00:00" by tar.
So I would suggest a version 0.0002 of my patch^2 as:
int frac;
s = parse_decimal (s, 2, 0, 60, 1, &t->tm.tm_sec, &frac);
- t->tm.tm_sec += frac;
}
Christian
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/