Skip to content

Commit

Permalink
y2038: Provide conversion helpers for struct __timeval64
Browse files Browse the repository at this point in the history
Those functions allow easy conversion between Y2038 safe, glibc internal
struct __timeval64 and other time related data structures (like struct timeval
or struct __timespec64).

Build tests:
./src/scripts/build-many-glibcs.py glibcs
  • Loading branch information
Lukasz Majewski committed Jan 17, 2020
1 parent 7352bee commit 25c928a
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions include/time.h
Expand Up @@ -304,6 +304,30 @@ valid_timeval_to_timespec64 (const struct timeval tv)
return ts64;
}

/* Convert a known valid struct timeval into a struct __timeval64. */
static inline struct __timeval64
valid_timeval_to_timeval64 (const struct timeval tv)
{
struct __timeval64 tv64;

tv64.tv_sec = tv.tv_sec;
tv64.tv_usec = tv.tv_usec;

return tv64;
}

/* Convert a struct __timeval64 into a struct __timespec64. */
static inline struct __timespec64
timeval64_to_timespec64 (const struct __timeval64 tv64)
{
struct __timespec64 ts64;

ts64.tv_sec = tv64.tv_sec;
ts64.tv_nsec = tv64.tv_usec * 1000;

return ts64;
}

/* Convert a known valid struct timespec into a struct __timespec64. */
static inline struct __timespec64
valid_timespec_to_timespec64 (const struct timespec ts)
Expand Down Expand Up @@ -342,6 +366,18 @@ valid_timespec64_to_timeval (const struct __timespec64 ts64)
return tv;
}

/* Convert a struct __timespec64 into a struct __timeval64. */
static inline struct __timeval64
timespec64_to_timeval64 (const struct __timespec64 ts64)
{
struct __timeval64 tv64;

tv64.tv_sec = ts64.tv_sec;
tv64.tv_usec = ts64.tv_nsec / 1000;

return tv64;
}

/* Check if a value is in the valid nanoseconds range. Return true if
it is, false otherwise. */
static inline bool
Expand Down

0 comments on commit 25c928a

Please sign in to comment.