X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib%2Ftimestamp.h;h=ac69846bc29d86aa293849958ac51c856a6e559a;hb=c5e4bd4c75bf1f1e8c75c460853340a15917d55c;hp=14a2eb1610f012ea05adc60f079167bc5a20a6f1;hpb=e8c3ca2d1d0cac3d64985b45a9f654d2029a7518;p=wimlib diff --git a/include/wimlib/timestamp.h b/include/wimlib/timestamp.h index 14a2eb16..ac69846b 100644 --- a/include/wimlib/timestamp.h +++ b/include/wimlib/timestamp.h @@ -1,77 +1,39 @@ +/* + * timestamp.h + * + * Conversion between Windows NT timestamps and UNIX timestamps. + */ + #ifndef _WIMLIB_TIMESTAMP_H #define _WIMLIB_TIMESTAMP_H -#include "wimlib/types.h" -#include #include #include -#define intervals_per_second (1000000000ULL / 100ULL) -#define intervals_per_microsecond (10) -#define nanoseconds_per_interval (100) -#define days_per_year (365ULL) -#define seconds_per_day (3600ULL * 24ULL) -#define intervals_per_day (seconds_per_day * intervals_per_second) -#define intervals_per_year (intervals_per_day * days_per_year) -#define years_1601_to_1970 (1970ULL - 1601ULL) -#define leap_years_1601_to_1970 (years_1601_to_1970 / 4ULL - 3ULL) -#define intervals_1601_to_1970 (years_1601_to_1970 * intervals_per_year \ - + leap_years_1601_to_1970 * intervals_per_day) +#include "wimlib/types.h" -static inline u64 -unix_timestamp_to_wim(time_t t) -{ - return (u64)intervals_1601_to_1970 + t * intervals_per_second; -} +extern time_t +wim_timestamp_to_time_t(u64 timestamp); -/* 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) -{ - return (timestamp - intervals_1601_to_1970) / intervals_per_second; -} +extern struct timeval +wim_timestamp_to_timeval(u64 timestamp); -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; -} +extern struct timespec +wim_timestamp_to_timespec(u64 timestamp); -static inline struct timeval -wim_timestamp_to_timeval(u64 timestamp) -{ - 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; -} +extern u64 +time_t_to_wim_timestamp(time_t t); -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; -} +extern u64 +timeval_to_wim_timestamp(const struct timeval *tv); -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 +timespec_to_wim_timestamp(const struct timespec *ts); extern u64 -get_wim_timestamp(void); +now_as_wim_timestamp(void); extern void wim_timestamp_to_str(u64 timestamp, tchar *buf, size_t len); -#endif +#endif /* _WIMLIB_TIMESTAMP_H */