Index: util/win/time.cc |
diff --git a/util/win/time.cc b/util/win/time.cc |
index 8e4760bb13cd92ad700a357fb4f83fea0120fe11..1665b9c6efbb9b25746576694d84c52374c31744 100644 |
--- a/util/win/time.cc |
+++ b/util/win/time.cc |
@@ -24,34 +24,36 @@ namespace { |
const uint64_t kMicrosecondsPerSecond = static_cast<uint64_t>(1E6); |
-timeval MicrosecondsToTimeval(uint64_t t) { |
+uint64_t FiletimeToMicroseconds(const FILETIME& filetime) { |
+ uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) | |
+ filetime.dwLowDateTime; |
+ return t / 10; // 100 nanosecond intervals to microseconds. |
+} |
+ |
+timeval MicrosecondsToTimeval(uint64_t microseconds) { |
timeval tv; |
- tv.tv_sec = static_cast<long>(t / kMicrosecondsPerSecond); |
- tv.tv_usec = static_cast<long>(t % kMicrosecondsPerSecond); |
+ tv.tv_sec = static_cast<long>(microseconds / kMicrosecondsPerSecond); |
+ tv.tv_usec = static_cast<long>(microseconds % kMicrosecondsPerSecond); |
return tv; |
} |
} // namespace |
timeval FiletimeToTimevalEpoch(const FILETIME& filetime) { |
- uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) | |
- filetime.dwLowDateTime; |
- t /= 10; // 100 nanosecond intervals to microseconds. |
+ uint64_t microseconds = FiletimeToMicroseconds(filetime); |
+ |
// Windows epoch is 1601-01-01, and FILETIME ticks are 100 nanoseconds. |
// 1601 to 1970 is 369 years + 89 leap days = 134774 days * 86400 seconds per |
// day. It's not entirely clear, but it appears that these are solar seconds, |
// not SI seconds, so there are no leap seconds to be considered. |
const uint64_t kNumSecondsFrom1601To1970 = (369 * 365 + 89) * 86400ULL; |
- DCHECK_GE(t, kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond); |
- t -= kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond; |
- return MicrosecondsToTimeval(t); |
+ DCHECK_GE(microseconds, kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond); |
+ microseconds -= kNumSecondsFrom1601To1970 * kMicrosecondsPerSecond; |
+ return MicrosecondsToTimeval(microseconds); |
} |
timeval FiletimeToTimevalInterval(const FILETIME& filetime) { |
- uint64_t t = (static_cast<uint64_t>(filetime.dwHighDateTime) << 32) | |
- filetime.dwLowDateTime; |
- t /= 10; // 100 nanosecond intervals to microseconds. |
- return MicrosecondsToTimeval(t); |
+ return MicrosecondsToTimeval(FiletimeToMicroseconds(filetime)); |
} |
void GetTimeOfDay(timeval* tv) { |