summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-12-09 23:07:44 +0100
committerMichael Stahl <mstahl@redhat.com>2013-12-10 15:32:27 +0100
commit349bfa2a9a621e6e8041ffea847a76d7c7b114cc (patch)
tree0308cb6f0c8eae7d1029a03edf7cc8e29ee699e3
parent9b498bb45b34a474b666107265896d69707472d1 (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)
-rw-r--r--editeng/source/items/flditem.cxx12
-rw-r--r--editeng/source/uno/unofield.cxx2
-rw-r--r--include/editeng/flditem.hxx6
-rw-r--r--svl/source/items/dateitem.cxx6
4 files changed, 13 insertions, 13 deletions
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 ) );
diff --git a/include/editeng/flditem.hxx b/include/editeng/flditem.hxx
index 5b2756337e52..34ff0b994d74 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 ca4c7503b985..a734b3569f77 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;
}