Hi Guiding,

Both your reference and the Open Group specification documents both only state that POSIX requires time_t to be an integer type, not a signed integer.

GNU libc additionally mandates a signed integer but notes this is a GNU extension and not a POSIX requirement.

The 2024 edition of POSIX has introduced a requirement for time_t to be 64 bits. As has already been noted this is itself a substantial change.

  Byron

On 4 Nov 2024, at 11:33 PM, Guiding Li <ligd...@gmail.com> wrote:

Hi all:

We decide change 'time_t' from unsigned type to signed type in PR:
https://github.com/apache/nuttx/pull/14460

Because when compile some POSIX library, there always be a warning on
comparison
between time_t and zero.

For example:

The following code will generate warnings:
auto now = time(nullptr);
auto last_active_time = GetEventService(self->ctx_)->getActiveTime(); if
(last_active_time + 60 * 1000 / 1000 <= now) {

src/ams/../controller/controller_timer.h: In lambda function:
src/ams/../controller/controller_timer.h:117:57: warning: comparison of
integer expressions of different signedness: 'long long int' and 'long long
unsigned int' [-Wsign-compare]
117 | if (last_active_time + 60 * 1000 / 1000 <= now) {


And we can find an reference on the official website:

https://www.gnu.org/software/libc/manual/html_node/Time-Types.html

On POSIX-conformant systems, time_t is an integer type.


The comparation of the merits and shortcomings:

Advantage:
For the most POSIX applications they assume the time_t as signed and do
compare with 0.
The code will become more compatible after this modification.

Disadvantage:
None.


If there is any question about this, please let me know.
Thanks,
Guiding

Reply via email to