[PATCH v9] y2038: Provide conversion helpers for struct __timespec64

Lukasz Majewski lukma@denx.de
Fri Sep 27 09:10:00 GMT 2019


Hi Paul, Joseph,

> On 9/26/19 2:55 PM, Lukasz Majewski wrote:
> > +/* Convert a known valid struct timeval into a struct
> > __timespec64.  */ +static inline void
> > +valid_timeval_to_timespec64 (const struct timeval *tv32,
> > +			     struct __timespec64 *ts64)
> > +{
> > +  ts64->tv_sec = tv32->tv_sec;
> > +  ts64->tv_nsec = tv32->tv_usec * 1000;
> > +}  
> 
> I suggest using values rather than pointers. That is, this function
> can accept a struct timeval and return a struct __timespec64. The *s
> and the consts just get in the way for something simple like this,
> and using values will simplify the source code.
> 

Then I will trim the patch to:

1. Only provide:
	valid_timeval_to_timespec64 ()
	valid_timespec_to_timespec64 ()
	valid_timespec64_to_timespec ()
	valid_timespec64_to_timeval ()

As those functions are needed for RISC-V 32 glibc port patch series as
well.

2. Above "valid" functions will use values instead of pointers:

static inline struct __timespec64
valid_timespec_to_timespec64 (const struct timespec tp)
{
  struct __timespec64 ts64;

  ts64.tv_sec = ts32.tv_sec;
  ts64.tv_nsec = ts32.tv_nsec;

  return ts64;
}

> For the fancier functions that do range checking, you can simply
> return an invalid result (with tv_nsec < 0, say). So you don't need a
> separate boolean there. Some GNU apps do this sort of thing.

In glibc I've already found function which returns struct with all
fields set to 0 (./support/blob_repeat.c - support blob repeat
allocate) and also sets explicitly errno.

In our case we could return -1 in tv_nsec as you suggested.


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20190927/47760549/attachment.sig>


More information about the Libc-alpha mailing list