diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-12-09 23:07:44 +0100 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2013-12-10 16:05:15 +0000 |
commit | 7ea64977f1318d14bda60bd3bd042b17ee6d77a8 (patch) | |
tree | 9badbb4f59ee1b22816fce19e8c020a6cfc238aa | |
parent | 1a37462bb59f036b5b871e6f1361c4b2fd216481 (diff) |
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 <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 5ee9dca1ca655dbe8fa0a8cc98853aacc2d6a7ce)
Reviewed-on: https://gerrit.libreoffice.org/7024
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
Tested-by: Tor Lillqvist <tml@collabora.com>
-rw-r--r-- | editeng/source/items/flditem.cxx | 12 | ||||
-rw-r--r-- | editeng/source/uno/unofield.cxx | 2 | ||||
-rw-r--r-- | include/editeng/flditem.hxx | 6 | ||||
-rw-r--r-- | svl/source/items/dateitem.cxx | 6 |
4 files changed, 13 insertions, 13 deletions
diff --git a/editeng/source/items/flditem.cxx b/editeng/source/items/flditem.cxx index bc67903341eb..af68b5319173 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 86a039b89f47..ab0d8838161e 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 37f42a37c217..7cf8df232c3c 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 be6017334edb..fa5511786dcf 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; } |