From 7e5f69aa33509a359b547b9a4a6569a55cd5d5c9 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Sun, 20 Oct 2024 22:51:02 +0500 Subject: Make tools::Time ctor taking sal_Int64 private This ctor is meant to set the value of nTime directly; and that value is not nanoseconds, but an encoded value, using SEC_/MIN_/HOUR_MASK. But in some places, this ctor was misused for setting of nanoseconds, which would only accidentally work for values less than one second. All places that initialized tools::Time with 0, now use EMPTY. This makes the ctor private; and for the very few cases where really the encoded value of nTime is stored / restored, fromEncodedTime is introduced. Change-Id: I1f1994bd9aab1b51a41b1de637619049fe820da4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175283 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- include/tools/datetime.hxx | 2 +- include/tools/duration.hxx | 2 +- include/tools/time.hxx | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) (limited to 'include/tools') diff --git a/include/tools/datetime.hxx b/include/tools/datetime.hxx index f50db1049a77..29dbc80d2ed1 100644 --- a/include/tools/datetime.hxx +++ b/include/tools/datetime.hxx @@ -48,7 +48,7 @@ public: explicit DateTime( DateTimeInitSystem ); DateTime( const DateTime& rDateTime ) : Date( rDateTime ), Time( rDateTime ) {} - explicit DateTime( const Date& rDate ) : Date( rDate ), Time(0) {} + explicit DateTime( const Date& rDate ) : Date( rDate ), Time(Time::EMPTY) {} explicit DateTime( const tools::Time& rTime ) : Date(0), Time( rTime ) {} DateTime( const Date& rDate, const tools::Time& rTime ) : Date( rDate ), Time( rTime ) {} diff --git a/include/tools/duration.hxx b/include/tools/duration.hxx index 9f032539e142..ca0d7088b7e1 100644 --- a/include/tools/duration.hxx +++ b/include/tools/duration.hxx @@ -96,7 +96,7 @@ private: void SetTimeDiff(const Time& rStart, const Time& rEnd); private: - Time maTime = Time(0); + Time maTime = Time(Time::EMPTY); sal_Int32 mnDays = 0; }; } diff --git a/include/tools/time.hxx b/include/tools/time.hxx index c92bdd9aee05..9b3d15f5ec22 100644 --- a/include/tools/time.hxx +++ b/include/tools/time.hxx @@ -40,6 +40,7 @@ class SAL_WARN_UNUSED TOOLS_DLLPUBLIC Time { private: sal_Int64 nTime; + explicit Time(sal_Int64 _nTime) { nTime = _nTime; } static sal_Int64 assemble(sal_uInt32 h, sal_uInt32 m, sal_uInt32 s, sal_uInt64 ns); short GetSign() const { return (nTime >= 0) ? +1 : -1; } @@ -78,13 +79,15 @@ public: explicit Time( TimeInitEmpty ) { nTime = 0; } explicit Time( TimeInitSystem ); - explicit Time( sal_Int64 _nTime ) { Time::nTime = _nTime; } Time( const tools::Time& rTime ) = default; explicit Time( const css::util::Time& rTime ); explicit Time( const css::util::DateTime& rDateTime ); Time( sal_uInt32 nHour, sal_uInt32 nMin, sal_uInt32 nSec = 0, sal_uInt64 nNanoSec = 0 ); + // The argument is not nanoseconds, it's what nTime must contain! + static Time fromEncodedTime(sal_Int64 _nTime) { return Time(_nTime); } + void SetTime( sal_Int64 nNewTime ) { nTime = nNewTime; } sal_Int64 GetTime() const { return nTime; } css::util::Time GetUNOTime() const { return css::util::Time(GetNanoSec(),GetSec(),GetMin(),GetHour(),false); } -- cgit