[Top][All Lists]

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

[avr-libc-dev] [bug #44519] Use int64_t for time_t and an earlier epoch

From: Gregor Riepl
Subject: [avr-libc-dev] [bug #44519] Use int64_t for time_t and an earlier epoch than 2000-01-01 00:00:00
Date: Thu, 12 Mar 2015 15:11:30 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.5.0


                 Summary: Use int64_t for time_t and an earlier epoch than
2000-01-01 00:00:00
                 Project: AVR C Runtime Library
            Submitted by: onitake
            Submitted on: Thu 12 Mar 2015 03:11:29 PM GMT
                Category: Library
                Severity: 3 - Normal
                Priority: 5 - Normal
              Item Group: libc code
                  Status: None
        Percent Complete: 0%
             Assigned to: None
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
                 Release: Unknown
           Fixed Release: None



This feature request applies to avr-libc 1.8.1. (the bug tracker does not list
this version)

avr-libc contains an implementation of the POSIX/ISO C time API. The
documentation states that, due to limitation of the 8bit AVR architecture,
some corners were cut and the API is limited in respect to ISO C.

This generally ok, but time_t is represented by an unsigned 32bit integer.
This runs contrary to efforts to modernize the C time API. Most modern C
runtime library implementors have opted to use a signed 64bit integer, which
avoids the "Year 2038 Problem". avr-libc avoids this problem differently, at a
cost: The time epoch is defined as midnight Jan 1 2000, and time_t is an
unsigned type. This allows for dates up to Feb 2136 to be represented, but
earlier dates than Jan 2000 are invalid.

While doing calculations on 64bit quantities bears a performance cost on an
8bit architecture, that cost is relatively small for most operations. For what
it's worth, the same applies to 32bit quantities anyway. Also, modern compiler
handle the "emulation" of 32bit and 64bit arithmetic automatically.

With these things in mind, I request that the avr-libc time implementation be
changed to use a signed 64bit type to represent a timestamp (time_t), and the
epoch be changed to an earlier date than Jan 1 2000, such as the Unix epoch
(midnight Jan 1 1970) or a different commonly used one (Jan 1 1900, Jan 1
1601). Allowing for negative timestamps to represent valid dates is also a


Reply to this item at:


  Message sent via/by Savannah

reply via email to

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