freeipmi-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Freeipmi-devel] [bug #31769] Leap years are not included into the formu


From: anonymous
Subject: [Freeipmi-devel] [bug #31769] Leap years are not included into the formula
Date: Thu, 25 Nov 2010 21:51:26 +0000
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7

URL:
  <http://savannah.gnu.org/bugs/?31769>

                 Summary: Leap years are not included into the formula
                 Project: GNU FreeIPMI
            Submitted by: None
            Submitted on: Thu 25 Nov 2010 09:51:25 PM UTC
                Category: libfreeipmi
                Severity: 3 - Normal
                Priority: 5 - Normal
              Item Group: Improper Behaviour
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
        Operating System: GNU/Linux

    _______________________________________________________

Details:

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




    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?31769>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]