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

Michael Stahl mstahl at redhat.com
Tue Jul 2 22:04:34 PDT 2013


 basic/source/sbx/sbxvalue.cxx    |    3 +--
 include/tools/stream.hxx         |    6 ++++--
 svl/source/items/dateitem.cxx    |    2 +-
 sw/source/core/layout/atrfrm.cxx |   24 +++++++++++++++++++-----
 tools/source/stream/stream.cxx   |    4 ++--
 5 files changed, 27 insertions(+), 12 deletions(-)

New commits:
commit c7f23c281765a75ea7840f8dd54449e20abb8fc6
Author: Michael Stahl <mstahl at redhat.com>
Date:   Sun Jun 30 21:18:45 2013 +0200

    SvStream: remove the error prone operator<</>>(sal_Int64)
    
    As the recent regression after merging AOO patch adding code serializing
    "long" variables has shown, this overload (which was added in
    7b2a0e541567be9750dfc7d98374555967da3470) is a bad idea.
    
    In a unxlngx build, nm finds uses of the symbols _ZN8SvStreamrsERl
    and _ZN8SvStreamlsEl in these files:
    
    - sbxvalue.cxx: this appears to be a legitimate use with sal_Int64
    
    - dateitem.cxx: this was accidentally changed by commit
      9830fd36dbdb72c79703b0c61efc027fba793c5a
    
    - atrfrm.cxx: this was added for Table Autoformat enhancement in
      7e8c0bd73ee59ff3041e55268c77203373962e51, which is after the
      sal_Int64 operators were added, so the file format is now
      platform dependent
    
    Change-Id: I78352b5429b53612c4831cdb81b587b5de5180a9
    (cherry picked from commit 3835dee3c777bf10693903cb0866d22fab3794ea)
    Reviewed-on: https://gerrit.libreoffice.org/4685
    Reviewed-by: Fridrich Strba <fridrich at documentfoundation.org>
    Tested-by: Fridrich Strba <fridrich at documentfoundation.org>

diff --git a/basic/source/sbx/sbxvalue.cxx b/basic/source/sbx/sbxvalue.cxx
index f0ea5d1..3efbdab 100644
--- a/basic/source/sbx/sbxvalue.cxx
+++ b/basic/source/sbx/sbxvalue.cxx
@@ -1449,9 +1449,8 @@ sal_Bool SbxValue::LoadData( SvStream& r, sal_uInt16 )
             break;
         }
         //#fdo39428 SvStream no longer supports operator>>(long&)
-        //SvStream now has operator>>(sal_Int64&)
         case SbxSALINT64:
-            r >> aData.nInt64;
+            r.ReadInt64(aData.nInt64);
             break;
         case SbxSALUINT64:
             r >> aData.uInt64;
diff --git a/include/tools/stream.hxx b/include/tools/stream.hxx
index 78a0bc3..7897d7f 100644
--- a/include/tools/stream.hxx
+++ b/include/tools/stream.hxx
@@ -307,7 +307,8 @@ public:
     SvStream&       operator>>( sal_uInt64& rUInt64 );
     SvStream&       operator>>( sal_Int16& rInt16 );
     SvStream&       operator>>( sal_Int32& rInt32 );
-    SvStream&       operator>>( sal_Int64& rInt64 );
+    SvStream&       operator>>( sal_Int64& rInt64 ) SAL_DELETED_FUNCTION;
+    SvStream&       ReadInt64(sal_Int64 & rInt64);
 
     SvStream&       operator>>( signed char& rChar );
     SvStream&       operator>>( char& rChar );
@@ -321,7 +322,8 @@ public:
     SvStream&       operator<<( sal_uInt64 nuInt64 );
     SvStream&       operator<<( sal_Int16 nInt16 );
     SvStream&       operator<<( sal_Int32 nInt32 );
-    SvStream&       operator<<( sal_Int64 nInt64 );
+    SvStream&       operator<<( sal_Int64 nInt64 ) SAL_DELETED_FUNCTION;
+    SvStream&       WriteInt64(sal_Int64 nInt64);
 
     SvStream&       operator<<( bool b )
     { return operator<<(static_cast< sal_Bool >(b)); }
diff --git a/svl/source/items/dateitem.cxx b/svl/source/items/dateitem.cxx
index 54e942e..67ebba6 100644
--- a/svl/source/items/dateitem.cxx
+++ b/svl/source/items/dateitem.cxx
@@ -102,7 +102,7 @@ SvStream& SfxDateTimeItem::Store( SvStream& rStream, sal_uInt16 ) const
 {
     DBG_CHKTHIS(SfxDateTimeItem, 0);
     rStream << aDateTime.GetDate();
-    rStream << aDateTime.GetTime();
+    rStream << static_cast<sal_Int32>(aDateTime.GetTime());
     return rStream;
 }
 
diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx
index cf5a03e..06a290a 100644
--- a/sw/source/core/layout/atrfrm.cxx
+++ b/sw/source/core/layout/atrfrm.cxx
@@ -1196,16 +1196,30 @@ bool SwFmtSurround::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId )
 
 SvStream& SwFmtVertOrient::Store(SvStream &rStream, sal_uInt16 /*version*/) const
 {
-    rStream << nYPos << eOrient << eRelation;
+#if SAL_TYPES_SIZEOFLONG == 8
+    rStream.WriteInt64(nYPos);
+#else
+    rStream << static_cast<sal_Int32>(nYPos);
+#endif
+    rStream << eOrient << eRelation;
     return rStream;
 }
 
 SfxPoolItem* SwFmtVertOrient::Create(SvStream &rStream, sal_uInt16 /*itemVersion*/) const
 {
-    SwTwips yPos;
-    sal_Int16 orient;
-    sal_Int16 relation;
-    rStream >> yPos >> orient >> relation;
+    SwTwips yPos(0);
+    sal_Int16 orient(0);
+    sal_Int16 relation(0);
+    // compatibility hack for Table Auto Format: SwTwips is "long" :(
+    // (this means that the file format is platform dependent)
+#if SAL_TYPES_SIZEOFLONG == 8
+    rStream.ReadInt64(yPos);
+#else
+    sal_Int32 n;
+    rStream >> n;
+    yPos = n;
+#endif
+    rStream >> orient >> relation;
 
     return new SwFmtVertOrient(yPos, orient, relation);
 }
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx
index e802566..f964e6e 100644
--- a/tools/source/stream/stream.cxx
+++ b/tools/source/stream/stream.cxx
@@ -962,7 +962,7 @@ SvStream& SvStream::operator>>(sal_Int32& r)
     return *this;
 }
 
-SvStream& SvStream::operator>>(sal_Int64& r)
+SvStream& SvStream::ReadInt64(sal_Int64& r)
 {
     sal_Int64 n = 0;
     READNUMBER_WITHOUT_SWAP(sal_Int64, n)
@@ -1107,7 +1107,7 @@ SvStream& SvStream::operator<<  ( sal_Int32 v )
     return *this;
 }
 
-SvStream& SvStream::operator<<  ( sal_Int64 v )
+SvStream& SvStream::WriteInt64  (sal_Int64 v)
 {
     if( bSwap )
         SwapInt64(v);


More information about the Libreoffice-commits mailing list