[PATCH 1/2] y2038: Helper macro to convert struct __timespec64 to struct timespec
Paul Eggert
eggert@cs.ucla.edu
Fri Oct 18 17:36:00 GMT 2019
On 10/18/19 7:57 AM, Lukasz Majewski wrote:
> +/* Check if a value lies with the valid nanoseconds range. */
> +#define IS_VALID_NANOSECONDS(ns) ((ns) >= 0 && (ns) <= 999999999)
This should be a static or inline function; there's no need for the
excessive power of a macro here.
> +#define timespec64_to_timespec(ts64) \
> + ({ \
> + if (! IS_VALID_NANOSECONDS (ts64.tv_nsec)) \
> + { \
> + __set_errno (EINVAL); \
> + return -1; \
> + } \
> + if (! in_time_t_range (ts64.tv_sec)) \
> + { \
> + __set_errno (EOVERFLOW); \
> + return -1; \
> + } \
> + valid_timespec64_to_timespec (ts64); })
This macro is too confusing. Instead, if there's a need for this sort of
thing, I suggest a static or inline function that returns true or false
(setting errno); the caller can decide what to do if it returns false.
More information about the Libc-alpha
mailing list