From 7e627cf5f373986e6b2976a9c5099f98aac522eb Mon Sep 17 00:00:00 2001 From: spx Date: Tue, 14 Aug 2012 19:51:53 -0700 Subject: [PATCH] Fixed that Time measure logs invalid format error due to uninitialized m_Time. http://rainmeter.net/forum/viewtopic.php?f=14&t=13124 --- Library/MeasureTime.cpp | 21 ++++++++++++++++----- Library/MeasureTime.h | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Library/MeasureTime.cpp b/Library/MeasureTime.cpp index 2094494e..6b3c26b2 100644 --- a/Library/MeasureTime.cpp +++ b/Library/MeasureTime.cpp @@ -87,11 +87,7 @@ void CMeasureTime::TimeToString(WCHAR* buf, size_t bufLen, const WCHAR* format, } } -/* -** Updates the current time -** -*/ -void CMeasureTime::UpdateValue() +void CMeasureTime::FillCurrentTime() { FILETIME ftUTCTime; GetSystemTimeAsFileTime(&ftUTCTime); @@ -102,6 +98,15 @@ void CMeasureTime::UpdateValue() m_Time.LowPart = ftUTCTime.dwLowDateTime; m_Time.QuadPart += m_DeltaTime.QuadPart; +} + +/* +** Updates the current time +** +*/ +void CMeasureTime::UpdateValue() +{ + FillCurrentTime(); if (!m_Format.empty()) { @@ -258,4 +263,10 @@ void CMeasureTime::ReadOptions(CConfigParser& parser, const WCHAR* section) m_DeltaTime.QuadPart = (LONGLONG)(zone * 3600) * 10000000; } } + + if (!m_Initialized) + { + // Initialize m_Time to avoid causing EINVAL in TimeToString() until calling UpdateValue() + FillCurrentTime(); + } } diff --git a/Library/MeasureTime.h b/Library/MeasureTime.h index e5c3b3bd..52a62df0 100644 --- a/Library/MeasureTime.h +++ b/Library/MeasureTime.h @@ -37,6 +37,7 @@ protected: private: void TimeToString(WCHAR* buf, size_t bufLen, const WCHAR* format, const tm* time); + void FillCurrentTime(); std::wstring m_Format; LARGE_INTEGER m_DeltaTime;