X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Ftimestamp.h;h=4dcc429b9f58d23bee876a90b27061473f9747c5;hp=406f6a5db7f34f929b4f6dc4492bef0556a96c78;hb=7acdc3aecd7ce546727ae8239e0d942c2a00db43;hpb=4498586932ab670cf4791d8cf991d9b3e0ce1545 diff --git a/src/timestamp.h b/src/timestamp.h index 406f6a5d..4dcc429b 100644 --- a/src/timestamp.h +++ b/src/timestamp.h @@ -18,41 +18,60 @@ #define intervals_1601_to_1970 (years_1601_to_1970 * intervals_per_year \ + leap_years_1601_to_1970 * intervals_per_day) -static inline u64 unix_timestamp_to_wim(time_t t) +static inline u64 +unix_timestamp_to_wim(time_t t) { return (u64)intervals_1601_to_1970 + t * intervals_per_second; } - /* Converts a timestamp as used in the WIM file to a UNIX timestamp as used in * the time() function. */ -static inline time_t wim_timestamp_to_unix(u64 timestamp) +static inline time_t +wim_timestamp_to_unix(u64 timestamp) { return (timestamp - intervals_1601_to_1970) / intervals_per_second; } -static inline u64 timeval_to_wim_timestamp(const struct timeval *tv) +static inline u64 +timeval_to_wim_timestamp(const struct timeval tv) { return intervals_1601_to_1970 - + (u64)tv->tv_sec * intervals_per_second - + (u64)tv->tv_usec * intervals_per_microsecond; + + (u64)tv.tv_sec * intervals_per_second + + (u64)tv.tv_usec * intervals_per_microsecond; } -static inline void wim_timestamp_to_timeval(u64 timestamp, struct timeval *tv) +static inline struct timeval +wim_timestamp_to_timeval(u64 timestamp) { - tv->tv_sec = (timestamp - intervals_1601_to_1970) / intervals_per_second; - tv->tv_usec = ((timestamp - intervals_1601_to_1970) / + struct timeval tv; + tv.tv_sec = (timestamp - intervals_1601_to_1970) / intervals_per_second; + tv.tv_usec = ((timestamp - intervals_1601_to_1970) / intervals_per_microsecond) % 1000000; + return tv; } -static inline u64 timespec_to_wim_timestamp(const struct timespec *ts) +static inline u64 +timespec_to_wim_timestamp(const struct timespec ts) { return intervals_1601_to_1970 - + (u64)ts->tv_sec * intervals_per_second - + (u64)ts->tv_nsec / nanoseconds_per_interval; + + (u64)ts.tv_sec * intervals_per_second + + (u64)ts.tv_nsec / nanoseconds_per_interval; } -extern u64 get_wim_timestamp(); -extern void wim_timestamp_to_str(u64 timestamp, char *buf, size_t len); +static inline struct timespec +wim_timestamp_to_timespec(u64 timestamp) +{ + struct timespec ts; + ts.tv_sec = (timestamp - intervals_1601_to_1970) / intervals_per_second; + ts.tv_nsec = ((timestamp - intervals_1601_to_1970) % intervals_per_second) * + nanoseconds_per_interval; + return ts; +} + +extern u64 +get_wim_timestamp(); + +extern void +wim_timestamp_to_str(u64 timestamp, char *buf, size_t len); #endif