Thu 02 Dec 2010 06:39:58 PM UTC, original submission:
Hello,
I want to inform you about a possible bug in your library.
It touches the calculation of the difference in epoch
file: freeipmi-0.8.11/libfreeipmi/src/fru-parse/ipmi-fru-parse-data.c
336. /* In FRU, epoch is 0:00 hrs 1/1/96
337. *
338. * So convert into ansi epoch
339. *
340. * 26 years difference in epoch
341. * 365 days/year
342. * etc.
343. *
344. */
345. mfg_date_time_tmp += (26 * 365 * 24 * 60 * 60);
346. (*mfg_date_time) = mfg_date_time_tmp;
This formula doesn't take leap years and so it misses six days
Years: 1972, 1976, 1980, 1984, 1988, 1992
Here are GNU date output in comparison to your formula:
$ date -d "1996-01-01 00:00:00" +%s
820447200
$ calc "26 * 365 * 24 * 60 * 60"
819936000
I'm not certain with the whole library architecture. Maybe you are correcting this in some other place or there is a doublebug? Please check if it is not better to use something like this:
// this code gives the same result as `date`
#include <stdio.h>
#include <time.h>
int main()
{
struct tm t;
t.tm_year = 96;
t.tm_mon = 0;
t.tm_mday = 1;
t.tm_hour = 0;
t.tm_min = 0;
t.tm_sec = 0;
time_t result = mktime(&t);
printf("1996-01-01 00:00:00 = %d\n", result);
return 0;
}
Appreciate your work.
BR
|