[Libreoffice-commits] core.git: Branch 'libreoffice-4-1' - editeng/source include/editeng svl/source

Michael Stahl mstahl at redhat.com
Tue Dec 10 07:25:27 PST 2013


 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 <mstahl at 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 <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at 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;
 }
 


More information about the Libreoffice-commits mailing list