[Swan-dev] IRC: fields of timeval
Andrew Cagney
andrew.cagney at gmail.com
Thu Sep 6 11:44:14 UTC 2018
On Thu, 6 Sep 2018 at 01:00, D. Hugh Redelmeier <hugh at mimosa.com> wrote:
>
> <cagney> DHR, fyi, 6d0aea9400 isn't portable
> <cagney> the timeval fields are long long on 32-bit machines
>
> Thanks. You are right about the tv_sec field.
>
> I happened to look at select(2) when I wrote 6d0aea9400. It says that the
> fields are long. Nothing about long long on 32-bit machines.
>
> It turns out that that man page is wrong. gettimeofday(2) says
>
> struct timeval {
> time_t tv_sec; /* seconds */
> suseconds_t tv_usec; /* microseconds */
> };
I looked at the man page for timeval, it looks the same.
> and in the notes:
>
> Traditionally, the fields of struct timeval were of type long.
>
> There is no reason for tv_usec to be anything other than long, int32_t,
> unsigned long, or uint_32: it needs to represent 0 - 999999. Is it legal
> for tv_usec to have other values?
For a small -ve delay it would be negative - hence *s*useconds_t?
>
> time_t is a very natural type for seconds. And we're going to get into
> trouble if it stays at 32 bits. So int64_t is a good choice. long is
> not.
>
> time_t is signed. If tv_sec is negative, can/should tv_usec be negative?
Interesting question.
Anyway, I replaced the code with realtime_t/deltattime_t making it
more portable.
Andrew
> _______________________________________________
> Swan-dev mailing list
> Swan-dev at lists.libreswan.org
> https://lists.libreswan.org/mailman/listinfo/swan-dev
More information about the Swan-dev
mailing list