From 349bfa2a9a621e6e8041ffea847a76d7c7b114cc Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Mon, 9 Dec 2013 23:07:44 +0100 Subject: editeng: fix more 32-bit Time breakage SfxDateTimeItem and SvxExtTimeField need to use 64-bit integer to store Time as well. These classes also have binary serialization Load()/Save() methods but they are unlikely to be used in a persistent way, just for the clipboard. The problem is easy to reproduce in Impress: Insert->Field->Time(fixed) (regression from 9830fd36dbdb72c79703b0c61efc027fba793c5a) Change-Id: I5946c5b94dd5a509805b6dc40461bbd910caffc4 (cherry picked from commit 7b9c61c7f20a679c5316a288c2ec2ffbf04b4200) --- editeng/source/items/flditem.cxx | 12 ++++++------ editeng/source/uno/unofield.cxx | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'editeng') diff --git a/editeng/source/items/flditem.cxx b/editeng/source/items/flditem.cxx index 8eb506a90a49..972d8f58a653 100644 --- a/editeng/source/items/flditem.cxx +++ b/editeng/source/items/flditem.cxx @@ -756,8 +756,8 @@ SV_IMPL_PERSIST1( SvxExtTimeField, SvxFieldData ); //---------------------------------------------------------------------------- SvxExtTimeField::SvxExtTimeField() + : m_nFixTime( Time(Time::SYSTEM).GetTime() ) { - nFixTime = Time( Time::SYSTEM ).GetTime(); eType = SVXTIMETYPE_VAR; eFormat = SVXTIMEFORMAT_STANDARD; } @@ -765,8 +765,8 @@ SvxExtTimeField::SvxExtTimeField() //---------------------------------------------------------------------------- SvxExtTimeField::SvxExtTimeField( const Time& rTime, SvxTimeType eT, SvxTimeFormat eF ) + : m_nFixTime( rTime.GetTime() ) { - nFixTime = rTime.GetTime(); eType = eT; eFormat = eF; } @@ -786,7 +786,7 @@ int SvxExtTimeField::operator==( const SvxFieldData& rOther ) const return sal_False; const SvxExtTimeField& rOtherFld = (const SvxExtTimeField&) rOther; - return ( ( nFixTime == rOtherFld.nFixTime ) && + return ((m_nFixTime == rOtherFld.m_nFixTime) && ( eType == rOtherFld.eType ) && ( eFormat == rOtherFld.eFormat ) ); } @@ -797,7 +797,7 @@ void SvxExtTimeField::Load( SvPersistStream & rStm ) { sal_uInt16 nType, nFormat; - rStm >> nFixTime; + rStm.ReadInt64(m_nFixTime); rStm >> nType; rStm >> nFormat; @@ -809,7 +809,7 @@ void SvxExtTimeField::Load( SvPersistStream & rStm ) void SvxExtTimeField::Save( SvPersistStream & rStm ) { - rStm << nFixTime; + rStm.WriteInt64(m_nFixTime); rStm << (sal_uInt16) eType; rStm << (sal_uInt16) eFormat; } @@ -820,7 +820,7 @@ OUString SvxExtTimeField::GetFormatted( SvNumberFormatter& rFormatter, LanguageT { Time aTime( Time::EMPTY ); if ( eType == SVXTIMETYPE_FIX ) - aTime.SetTime( nFixTime ); + aTime.SetTime(m_nFixTime); else aTime = Time( Time::SYSTEM ); // current time return GetFormatted( aTime, eFormat, rFormatter, eLang ); diff --git a/editeng/source/uno/unofield.cxx b/editeng/source/uno/unofield.cxx index 13699a6d7d13..0f40c3858222 100644 --- a/editeng/source/uno/unofield.cxx +++ b/editeng/source/uno/unofield.cxx @@ -196,7 +196,7 @@ inline Date setDate( util::DateTime& rDate ) return Date( rDate.Day, rDate.Month, rDate.Year ); } -static util::DateTime getTime( long nTime ) +static util::DateTime getTime(sal_Int64 const nTime) { util::DateTime aTime; memset( &aTime, 0, sizeof( util::DateTime ) ); -- cgit v1.2.3