BUG: mktime() May Cause R6003 "integer divide by 0" ErrorID: Q116210
|
When you call mktime() with any time between 00:00:00 and 01:00:00 on
1/1/1970, with the TZ environment variable set to LOC000000 (Greenwich Mean
Time), the following error messages display:
Under MS-DOS:
Under Windows:run-time error - integer divide by 0
Application Error - integer divide by 0
Microsoft has confirmed this to be a bug in the products listed above. We
are researching this bug and will post new information here in the
Microsoft Knowledge Base as it becomes available.
This is not a problem in the Visual C++ 32-bit Edition.
The following sample code demonstrates how to reproduce this problem:
/*
/* COMMAND LINE:
/* DESCRIPTION: mktime() gives r6003 for time < 01:00:00 Jan. 1, 1970
/* Be sure that environment variable TZ=LOC000000 GMT
/*
#include <stdio.h>
#include <time.h>
#define START_TIME 3605L
void main(void)
{
time_t reference;
struct tm tblk;
char buf[40];
/* get current TZ environment variable
(TZ=LOC000000 on my system: GMT) */
_tzset();
/* init reference time to 01/01/1970 at 01:00:05 */
reference = START_TIME;
/* assign daylight savings time value */
tblk.tm_isdst = _daylight;
/* loop downwards from initial reference time */
for (reference = START_TIME;reference >= 0L; reference--)
{
tblk = *localtime(&reference);
strftime(buf, 39, "%c", &tblk);
printf("struct tm contents from localtime(): %s\n", buf);
/* NOTE: mktime() generates divide by 0 error for reference
seconds less than 3600 */
reference = mktime(&tblk);
printf("seconds from struct tm using mktime(): %ld\n", reference);
}
}
Additional query words: 1.00 1.50
Keywords : kb16bitonly
Version :
Platform :
Issue type :
Last Reviewed: August 5, 1999