editeng/source/items/flditem.cxx | 12 ++++++------ editeng/source/uno/unofield.cxx | 2 +- include/editeng/flditem.hxx | 6 +++--- svl/source/items/dateitem.cxx | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-)
New commits: commit 5ee9dca1ca655dbe8fa0a8cc98853aacc2d6a7ce Author: Michael Stahl <mst...@redhat.com> Date: Mon Dec 9 23:07:44 2013 +0100 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) Reviewed-on: https://gerrit.libreoffice.org/7021 Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/editeng/source/items/flditem.cxx b/editeng/source/items/flditem.cxx index bc67903..af68b53 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 86a039b..ab0d883 100644 --- a/editeng/source/uno/unofield.cxx +++ b/editeng/source/uno/unofield.cxx @@ -201,7 +201,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 ) ); diff --git a/include/editeng/flditem.hxx b/include/editeng/flditem.hxx index 37f42a3..7cf8df2 100644 --- a/include/editeng/flditem.hxx +++ b/include/editeng/flditem.hxx @@ -257,7 +257,7 @@ enum SvxTimeFormat { SVXTIMEFORMAT_APPDEFAULT = 0, // Set as in App class EDITENG_DLLPUBLIC SvxExtTimeField : public SvxFieldData { private: - sal_uInt32 nFixTime; + sal_Int64 m_nFixTime; SvxTimeType eType; SvxTimeFormat eFormat; @@ -268,8 +268,8 @@ public: SvxTimeType eType = SVXTIMETYPE_VAR, SvxTimeFormat eFormat = SVXTIMEFORMAT_STANDARD ); - sal_uInt32 GetFixTime() const { return nFixTime; } - void SetFixTime( const Time& rTime ) { nFixTime = rTime.GetTime(); } + sal_Int64 GetFixTime() const { return m_nFixTime; } + void SetFixTime( const Time& rTime ) { m_nFixTime = rTime.GetTime(); } SvxTimeType GetType() const { return eType; } void SetType( SvxTimeType eTp ) { eType = eTp; } diff --git a/svl/source/items/dateitem.cxx b/svl/source/items/dateitem.cxx index be60173..fa55117 100644 --- a/svl/source/items/dateitem.cxx +++ b/svl/source/items/dateitem.cxx @@ -90,9 +90,9 @@ SfxPoolItem* SfxDateTimeItem::Create( SvStream& rStream, sal_uInt16 ) const { DBG_CHKTHIS(SfxDateTimeItem, 0); sal_uInt32 nDate = 0; - sal_Int32 nTime = 0; + sal_Int64 nTime = 0; rStream >> nDate; - rStream >> nTime; + rStream.ReadInt64(nTime); DateTime aDT(nDate, nTime); return new SfxDateTimeItem( Which(), aDT ); } @@ -103,7 +103,7 @@ SvStream& SfxDateTimeItem::Store( SvStream& rStream, sal_uInt16 ) const { DBG_CHKTHIS(SfxDateTimeItem, 0); rStream << aDateTime.GetDate(); - rStream << static_cast<sal_Int32>(aDateTime.GetTime()); + rStream.WriteInt64(aDateTime.GetTime()); return rStream; }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits