mktime()

Corinna Vinschen vinschen@redhat.com
Fri Aug 26 07:24:00 GMT 2011


On Aug 24 09:53, Steven Abner wrote:
> 
> On Aug 24, 2011, at 7:48 AM, Steven Abner wrote:
> 
> >> Can you please send the simple testcase?
> 
> Hi;
>  A better test case which will expose also what I call "spring_forward_gap_bug". I didn't know at the time but this test will pick up the case glibc credits to Andreas Jaeger (1998). It can be adapted to other zones, as I did to include the glibc case. It's a butchered version from a much larger test, and set up in hourly increments since you have a grey area, "/* we let user decide or leave as -1 */".
> 
> extern time_t mktime(struct tm *tmPtr);
> extern struct tm *localtime_r(const time_t *timer, struct tm *tmPtr);
> #define MKTIME mktime
> #define LCTIME localtime_r
> 
> static struct {
> 	int y0, y1;
> 	char *sfStr, *tzStr;
> } sftests[ ] = {
> 	//536457600, 1167609600, "PST8PDT,M4.1.0,M10.5.0", "America/Vancouver"  //years 1987-2007
> 	883612800, 1167609600, "PST8PDT,M4.1.0,M10.5.0", "America/Vancouver"  //years 1998-2007
> };
> static void
> standard_format(void) {
> 	
> 	int i, cy0;
> 	for (i = 0; i < ((int) (sizeof (sftests) / sizeof (sftests[0]))); i++) {
> 		setenv("TZ", sftests[i].sfStr, 1);
> 		for (cy0 = sftests[i].y0; cy0 < sftests[i].y1; cy0 += 3600) {
> 			struct tm mtm, ptm;
> 			memset(&mtm, 0, sizeof(struct tm));
> 			mtm.tm_sec = cy0;
> 			mtm.tm_year = 70;
> 			mtm.tm_isdst = -1;
> 			time_t t0 = MKTIME(&mtm);
> 			LCTIME(&t0, &ptm);
> 			if ((memcmp(&mtm, &ptm, (sizeof(int) * 9))))
> 				printf("difference (20) %d\n", (int)cy0);
> 		}
> 	}
> }

A patch would be nice ;)


Corinna

-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat



More information about the Newlib mailing list