[Libreoffice-commits] core.git: 7 commits - connectivity/source filter/source include/filter lotuswordpro/source sc/source vcl/source

Michael Stahl mstahl at redhat.com
Mon Jun 6 12:51:58 UTC 2016


 connectivity/source/drivers/dbase/DIndex.cxx          |   32 ++++
 connectivity/source/drivers/dbase/DIndexes.cxx        |    2 
 connectivity/source/drivers/dbase/DTable.cxx          |   11 +
 connectivity/source/inc/dbase/DIndex.hxx              |    2 
 filter/source/graphicfilter/itga/itga.cxx             |   11 +
 filter/source/msfilter/svdfppt.cxx                    |    1 
 include/filter/msfilter/svdfppt.hxx                   |    4 
 lotuswordpro/source/filter/lwpsdwfileloader.cxx       |    2 
 lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx |   26 +--
 sc/source/filter/starcalc/scflt.cxx                   |   14 +
 vcl/source/filter/sgfbram.cxx                         |  130 +++++++-----------
 vcl/source/filter/sgvmain.cxx                         |   26 +--
 12 files changed, 144 insertions(+), 117 deletions(-)

New commits:
commit 1bf3cafd4cd6c3133adaad764e4f216a5d0ead1c
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Jun 6 13:56:43 2016 +0200

    sc: StarCalc/DOS import: fix an endian issue
    
    Change-Id: I0f76661d1aec104ee7e22a8abd5f734553796c33

diff --git a/sc/source/filter/starcalc/scflt.cxx b/sc/source/filter/starcalc/scflt.cxx
index 0d7f37c..44088e3 100644
--- a/sc/source/filter/starcalc/scflt.cxx
+++ b/sc/source/filter/starcalc/scflt.cxx
@@ -1021,7 +1021,19 @@ void Sc10Import::LoadFileInfo()
 void Sc10Import::LoadEditStateInfo()
 {
     Sc10EditStateInfo EditStateInfo;
-    rStream.Read(&EditStateInfo, sizeof(EditStateInfo));
+
+    sal_uInt64 const nOldPos(rStream.Tell());
+
+    rStream.ReadUInt16(EditStateInfo.CarretX);
+    rStream.ReadUInt16(EditStateInfo.CarretY);
+    rStream.ReadUInt16(EditStateInfo.CarretZ);
+    rStream.ReadUInt16(EditStateInfo.DeltaX);
+    rStream.ReadUInt16(EditStateInfo.DeltaY);
+    rStream.ReadUInt16(EditStateInfo.DeltaZ);
+    rStream.ReadUChar(EditStateInfo.DataBaseMode);
+    rStream.Read(EditStateInfo.Reserved, sizeof(EditStateInfo.Reserved));
+
+    assert(rStream.GetError() || rStream.Tell() == nOldPos + sizeof(Sc10EditStateInfo));
 
     nError = rStream.GetError();
     nShowTab = static_cast<SCTAB>(EditStateInfo.DeltaZ);
commit da4f7d5d76e054627b61521657d40141b9728e15
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Jun 3 23:50:14 2016 +0200

    filter: "tga" import: fix some endian issues in ImplReadPalette
    
    Change-Id: Ia8ec7b7e19cf9b6b19497cbd77ae5a4e2fdccee7

diff --git a/filter/source/graphicfilter/itga/itga.cxx b/filter/source/graphicfilter/itga/itga.cxx
index 20a9006..6bf858c 100644
--- a/filter/source/graphicfilter/itga/itga.cxx
+++ b/filter/source/graphicfilter/itga/itga.cxx
@@ -734,14 +734,21 @@ bool TGAReader::ImplReadPalette()
                 break;
 
             case 32 :
-                m_rTGA.Read( mpColorMap, 4 * nColors );
+                for (sal_uInt16 i = 0; i < nColors; i++)
+                {
+                    m_rTGA.ReadUInt32(mpColorMap[i]);
+                }
                 break;
 
             case 24 :
                 {
                     for ( sal_uLong i = 0; i < nColors; i++ )
                     {
-                        m_rTGA.Read( &mpColorMap[ i ], 3 );
+                        sal_uInt8 nBlue;
+                        sal_uInt8 nGreen;
+                        sal_uInt8 nRed;
+                        m_rTGA.ReadUChar(nBlue).ReadUChar(nGreen).ReadUChar(nRed);
+                        mpColorMap[i] = (nRed << 16) | (nGreen << 8) | nBlue;
                     }
                 }
                 break;
commit 3e9aa8b2b29f5222d93ace0e02207fe3bd7d853f
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Jun 3 23:28:10 2016 +0200

    lotuswordpro: fix some endian issues
    
    Change-Id: I224c2d894071d6ec7d0afd5e2780a42b842aa32e

diff --git a/lotuswordpro/source/filter/lwpsdwfileloader.cxx b/lotuswordpro/source/filter/lwpsdwfileloader.cxx
index b30097a..ac2687a 100644
--- a/lotuswordpro/source/filter/lwpsdwfileloader.cxx
+++ b/lotuswordpro/source/filter/lwpsdwfileloader.cxx
@@ -84,7 +84,7 @@ void LwpSdwFileLoader::CreateDrawObjects(std::vector< rtl::Reference<XFFrame> >*
     if (BinSignature[0] == 'S' && BinSignature[1] == 'M')
     {
         unsigned short nVersion;
-        m_pStream->Read(&nVersion,2);
+        m_pStream->ReadUInt16(nVersion);
 
         m_pStream->Seek(0);
         if (nVersion<0x0102)
diff --git a/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx b/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx
index de653c5..6d134a0 100644
--- a/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx
+++ b/lotuswordpro/source/filter/lwpsdwgrouploaderv0102.cxx
@@ -106,7 +106,7 @@ void LwpSdwGroupLoaderV0102::BeginDrawObjects(std::vector< rtl::Reference<XFFram
     }
     //version
     unsigned short nVersion;
-    m_pStream->Read(&nVersion,2);
+    m_pStream->ReadUInt16(nVersion);
     if (nVersion<0x0102)
     {
         assert(false);
@@ -116,15 +116,15 @@ void LwpSdwGroupLoaderV0102::BeginDrawObjects(std::vector< rtl::Reference<XFFram
     m_pStream->SeekRel(4);
     //record count
     unsigned short nRecCount;
-    m_pStream->Read(&nRecCount,2);
+    m_pStream->ReadUInt16(nRecCount);
     // selCount
     m_pStream->SeekRel(2);
     //boundrect
     unsigned short left,top,right,bottom;
-    m_pStream->Read(&left,2);
-    m_pStream->Read(&top,2);
-    m_pStream->Read(&right,2);
-    m_pStream->Read(&bottom,2);
+    m_pStream->ReadUInt16(left);
+    m_pStream->ReadUInt16(top);
+    m_pStream->ReadUInt16(right);
+    m_pStream->ReadUInt16(bottom);
     // fileSize
     m_pStream->SeekRel(2);
 
@@ -251,7 +251,7 @@ XFDrawGroup* LwpSdwGroupLoaderV0102::CreateDrawGroupObject()
     }
     //version
     unsigned short nVersion;
-    m_pStream->Read(&nVersion,2);
+    m_pStream->ReadUInt16(nVersion);
     if (nVersion<0x0102)
     {
         assert(false);
@@ -261,15 +261,15 @@ XFDrawGroup* LwpSdwGroupLoaderV0102::CreateDrawGroupObject()
     m_pStream->SeekRel(4);
     //record count
     unsigned short nRecCount;
-    m_pStream->Read(&nRecCount,2);
+    m_pStream->ReadUInt16(nRecCount);
     // selCount
     m_pStream->SeekRel(2);
     //boundrect
     unsigned short left,top,right,bottom;
-    m_pStream->Read(&left,2);
-    m_pStream->Read(&top,2);
-    m_pStream->Read(&right,2);
-    m_pStream->Read(&bottom,2);
+    m_pStream->ReadUInt16(left);
+    m_pStream->ReadUInt16(top);
+    m_pStream->ReadUInt16(right);
+    m_pStream->ReadUInt16(bottom);
     // fileSize
     m_pStream->SeekRel(2);
 
@@ -304,7 +304,7 @@ XFFrame* LwpSdwGroupLoaderV0102::CreateDrawObject()
 {
     //record type
     unsigned char recType;
-    m_pStream->Read(&recType,1);
+    m_pStream->ReadUChar(recType);
 
     LwpDrawObj* pDrawObj = nullptr;
     XFFrame* pRetObjct = nullptr;
commit 4849f342b6969abb777d91a1fa77ec120f861c48
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Jun 3 22:53:20 2016 +0200

    connectivity: DBase: fix some obvious endian issues
    
    These calls to SvStream::Read/Write operate on structs that contain
    32-bit integers.
    
    Change-Id: I2d45128ad482013cd9ef1fca0dd259dfc09c904f

diff --git a/connectivity/source/drivers/dbase/DIndex.cxx b/connectivity/source/drivers/dbase/DIndex.cxx
index a2e8e3e9..0a6e225 100644
--- a/connectivity/source/drivers/dbase/DIndex.cxx
+++ b/connectivity/source/drivers/dbase/DIndex.cxx
@@ -349,11 +349,27 @@ ONDXPage* ODbaseIndex::CreatePage(sal_uInt32 nPagePos, ONDXPage* pParent, bool b
     return pPage;
 }
 
+void connectivity::dbase::ReadHeader(
+        SvStream & rStream, ODbaseIndex::NDXHeader & rHeader)
+{
+    sal_uInt64 const nOldPos(rStream.Tell());
+    rStream.ReadUInt32(rHeader.db_rootpage);
+    rStream.ReadUInt32(rHeader.db_pagecount);
+    rStream.Read(&rHeader.db_frei, 4);
+    rStream.ReadUInt16(rHeader.db_keylen);
+    rStream.ReadUInt16(rHeader.db_maxkeys);
+    rStream.ReadUInt16(rHeader.db_keytype);
+    rStream.ReadUInt16(rHeader.db_keyrec);
+    rStream.Read(&rHeader.db_frei1, 3);
+    rStream.ReadUChar(rHeader.db_unique);
+    rStream.Read(&rHeader.db_name, 488);
+    assert(rStream.GetError() || rStream.Tell() == nOldPos + DINDEX_PAGE_SIZE);
+}
 
 SvStream& connectivity::dbase::operator >> (SvStream &rStream, ODbaseIndex& rIndex)
 {
     rStream.Seek(0);
-    rStream.Read(&rIndex.m_aHeader,DINDEX_PAGE_SIZE);
+    ReadHeader(rStream, rIndex.m_aHeader);
 
     rIndex.m_nRootPage = rIndex.m_aHeader.db_rootpage;
     rIndex.m_nPageCount = rIndex.m_aHeader.db_pagecount;
@@ -363,7 +379,19 @@ SvStream& connectivity::dbase::operator >> (SvStream &rStream, ODbaseIndex& rInd
 SvStream& connectivity::dbase::WriteODbaseIndex(SvStream &rStream, ODbaseIndex& rIndex)
 {
     rStream.Seek(0);
-    OSL_VERIFY( rStream.Write(&rIndex.m_aHeader,DINDEX_PAGE_SIZE) == DINDEX_PAGE_SIZE );
+    sal_uInt64 const nOldPos(rStream.Tell());
+    rStream.WriteUInt32(rIndex.m_aHeader.db_rootpage);
+    rStream.WriteUInt32(rIndex.m_aHeader.db_pagecount);
+    rStream.Write(&rIndex.m_aHeader.db_frei, 4);
+    rStream.WriteUInt16(rIndex.m_aHeader.db_keylen);
+    rStream.WriteUInt16(rIndex.m_aHeader.db_maxkeys);
+    rStream.WriteUInt16(rIndex.m_aHeader.db_keytype);
+    rStream.WriteUInt16(rIndex.m_aHeader.db_keyrec);
+    rStream.Write(&rIndex.m_aHeader.db_frei1, 3);
+    rStream.WriteUChar(rIndex.m_aHeader.db_unique);
+    rStream.Write(&rIndex.m_aHeader.db_name, 488);
+    assert(rStream.GetError() || rStream.Tell() == nOldPos + DINDEX_PAGE_SIZE);
+    SAL_WARN_IF(rStream.GetError(), "connectivity.dbase", "write error");
     return rStream;
 }
 
diff --git a/connectivity/source/drivers/dbase/DIndexes.cxx b/connectivity/source/drivers/dbase/DIndexes.cxx
index 939fd8a..34e98ec 100644
--- a/connectivity/source/drivers/dbase/DIndexes.cxx
+++ b/connectivity/source/drivers/dbase/DIndexes.cxx
@@ -60,7 +60,7 @@ sdbcx::ObjectType ODbaseIndexes::createObject(const OUString& _rName)
         ODbaseIndex::NDXHeader aHeader;
 
         pFileStream->Seek(0);
-        pFileStream->Read(&aHeader,DINDEX_PAGE_SIZE);
+        ReadHeader(*pFileStream, aHeader);
         delete pFileStream;
 
         ODbaseIndex* pIndex = new ODbaseIndex(m_pTable,aHeader,_rName);
diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx
index e3d518c..95c65ca 100644
--- a/connectivity/source/drivers/dbase/DTable.cxx
+++ b/connectivity/source/drivers/dbase/DTable.cxx
@@ -323,8 +323,15 @@ void ODbaseTable::fillColumns()
     for (; i < nFieldCount; i++)
     {
         DBFColumn aDBFColumn;
-        sal_Size nRead = m_pFileStream->Read(&aDBFColumn, sizeof(aDBFColumn));
-        if (nRead != sizeof(aDBFColumn))
+        sal_uInt64 const nOldPos(m_pFileStream->Tell());
+        m_pFileStream->Read(aDBFColumn.db_fnm, 11);
+        m_pFileStream->ReadUChar(aDBFColumn.db_typ);
+        m_pFileStream->ReadUInt32(aDBFColumn.db_adr);
+        m_pFileStream->ReadUChar(aDBFColumn.db_flng);
+        m_pFileStream->ReadUChar(aDBFColumn.db_dez);
+        m_pFileStream->Read(aDBFColumn.db_frei2, 14);
+        assert(m_pFileStream->GetError() || m_pFileStream->Tell() == nOldPos + sizeof(aDBFColumn));
+        if (m_pFileStream->GetError())
         {
             SAL_WARN("connectivity.drivers", "ODbaseTable::fillColumns: short read!");
             break;
diff --git a/connectivity/source/inc/dbase/DIndex.hxx b/connectivity/source/inc/dbase/DIndex.hxx
index 3b51c11..b7f40ff 100644
--- a/connectivity/source/inc/dbase/DIndex.hxx
+++ b/connectivity/source/inc/dbase/DIndex.hxx
@@ -139,6 +139,8 @@ namespace connectivity
 
         SvStream& WriteODbaseIndex(SvStream &rStream, ODbaseIndex&);
         SvStream& operator >> (SvStream &rStream, ODbaseIndex&);
+
+        void ReadHeader(SvStream & rStream, ODbaseIndex::NDXHeader & rHeader);
     }
 }
 
commit 6325cdb735effc5c9ff85819b20aec4271158519
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Jun 3 22:00:12 2016 +0200

    filter: PPT import: PptPlaceholder is 1 byte large
    
    The array of 8 bytes corresponds to 8 enum values and is read directly
    in ReadPptSlideLayoutAto(); this was wrongly converted to enum.
    
    (regression from e5a03da8eb02c333502d6b427625e7bf554ff203)
    
    Change-Id: I5757e06459467b3c84c4a404493fa3be23e4e9a0

diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx
index 9c27674..3b5670f 100644
--- a/filter/source/msfilter/svdfppt.cxx
+++ b/filter/source/msfilter/svdfppt.cxx
@@ -309,6 +309,7 @@ SvStream& ReadPptSlideLayoutAtom( SvStream& rIn, PptSlideLayoutAtom& rAtom )
     sal_Int32 nTmp;
     rIn.ReadInt32(nTmp);
     rAtom.eLayout = static_cast<PptSlideLayout>(nTmp);
+    static_assert(sizeof(rAtom.aPlaceholderId) == 8, "wrong size of serialized array");
     rIn.Read( rAtom.aPlaceholderId, 8 );
     return rIn;
 }
diff --git a/include/filter/msfilter/svdfppt.hxx b/include/filter/msfilter/svdfppt.hxx
index 5efa503..c3c2d38 100644
--- a/include/filter/msfilter/svdfppt.hxx
+++ b/include/filter/msfilter/svdfppt.hxx
@@ -58,7 +58,7 @@ class PPTTextObj;
 class DffRecordHeader;
 class SvxBulletItem;
 enum class PptSlideLayout;
-enum class PptPlaceholder;
+enum class PptPlaceholder : sal_uInt8;
 
 #define PPT_IMPORTFLAGS_NO_TEXT_ASSERT  1
 
@@ -1456,7 +1456,7 @@ enum class PptSlideLayout
 };
 
 // the following table describes the placeholder id's (values from reality followed by values taken from the documentation)
-enum class PptPlaceholder
+enum class PptPlaceholder : sal_uInt8
 {
     NONE                   = 0,   //  0 None
     MASTERTITLE            = 1,   //  1 Master title
commit 06a6f3b352d4471892c6516aebf2e948cac329b0
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Jun 3 17:43:42 2016 +0200

    vcl: "sgf" filter: replace manual byte-swapping with SvStream methods
    
    Change-Id: I316744a036f540140c494bd7997ae7c5077913d2

diff --git a/vcl/source/filter/sgfbram.cxx b/vcl/source/filter/sgfbram.cxx
index c449afc..98644cd 100644
--- a/vcl/source/filter/sgfbram.cxx
+++ b/vcl/source/filter/sgfbram.cxx
@@ -35,20 +35,21 @@ SgfHeader::SgfHeader()
 
 SvStream& ReadSgfHeader(SvStream& rIStream, SgfHeader& rHead)
 {
-    rIStream.Read(&rHead.Magic, SgfHeaderSize);
-#if defined OSL_BIGENDIAN
-    rHead.Magic  =OSL_SWAPWORD(rHead.Magic  );
-    rHead.Version=OSL_SWAPWORD(rHead.Version);
-    rHead.Typ    =OSL_SWAPWORD(rHead.Typ    );
-    rHead.Xsize  =OSL_SWAPWORD(rHead.Xsize  );
-    rHead.Ysize  =OSL_SWAPWORD(rHead.Ysize  );
-    rHead.Xoffs  =OSL_SWAPWORD(rHead.Xoffs  );
-    rHead.Yoffs  =OSL_SWAPWORD(rHead.Yoffs  );
-    rHead.Planes =OSL_SWAPWORD(rHead.Planes );
-    rHead.SwGrCol=OSL_SWAPWORD(rHead.SwGrCol);
-    rHead.OfsLo  =OSL_SWAPWORD(rHead.OfsLo  );
-    rHead.OfsHi  =OSL_SWAPWORD(rHead.OfsHi  );
-#endif
+    sal_uInt64 const nOldPos(rIStream.Tell());
+    rIStream.ReadUInt16(rHead.Magic);
+    rIStream.ReadUInt16(rHead.Version);
+    rIStream.ReadUInt16(rHead.Typ);
+    rIStream.ReadUInt16(rHead.Xsize);
+    rIStream.ReadUInt16(rHead.Ysize);
+    rIStream.ReadInt16(rHead.Xoffs);
+    rIStream.ReadInt16(rHead.Yoffs);
+    rIStream.ReadUInt16(rHead.Planes);
+    rIStream.ReadUInt16(rHead.SwGrCol);
+    rIStream.Read(&rHead.Autor, 10);
+    rIStream.Read(&rHead.Programm, 10);
+    rIStream.ReadUInt16(rHead.OfsLo);
+    rIStream.ReadUInt16(rHead.OfsHi);
+    assert(rIStream.GetError() || rIStream.Tell() == nOldPos + SgfHeaderSize);
     return rIStream;
 }
 
@@ -65,15 +66,15 @@ SgfEntry::SgfEntry()
 
 SvStream& ReadSgfEntry(SvStream& rIStream, SgfEntry& rEntr)
 {
-    rIStream.Read(&rEntr.Typ, SgfEntrySize);
-#if defined OSL_BIGENDIAN
-    rEntr.Typ  =OSL_SWAPWORD(rEntr.Typ  );
-    rEntr.iFrei=OSL_SWAPWORD(rEntr.iFrei);
-    rEntr.lFreiLo=OSL_SWAPWORD (rEntr.lFreiLo);
-    rEntr.lFreiHi=OSL_SWAPWORD (rEntr.lFreiHi);
-    rEntr.OfsLo=OSL_SWAPWORD(rEntr.OfsLo);
-    rEntr.OfsHi=OSL_SWAPWORD(rEntr.OfsHi);
-#endif
+    sal_uInt64 const nOldPos(rIStream.Tell());
+    rIStream.ReadUInt16(rEntr.Typ);
+    rIStream.ReadUInt16(rEntr.iFrei);
+    rIStream.ReadUInt16(rEntr.lFreiLo);
+    rIStream.ReadUInt16(rEntr.lFreiHi);
+    rIStream.Read(&rEntr.cFrei, 10);
+    rIStream.ReadUInt16(rEntr.OfsLo);
+    rIStream.ReadUInt16(rEntr.OfsHi);
+    assert(rIStream.GetError() || rIStream.Tell() == nOldPos + SgfEntrySize);
     return rIStream;
 }
 
@@ -82,38 +83,27 @@ sal_uInt32 SgfEntry::GetOffset()
 
 SvStream& ReadSgfVector(SvStream& rIStream, SgfVector& rVect)
 {
-    rIStream.Read(&rVect, sizeof(rVect));
-#if defined OSL_BIGENDIAN
-    rVect.Flag =OSL_SWAPWORD(rVect.Flag );
-    rVect.x    =OSL_SWAPWORD(rVect.x    );
-    rVect.y    =OSL_SWAPWORD(rVect.y    );
-    rVect.OfsLo=OSL_SWAPDWORD (rVect.OfsLo);
-    rVect.OfsHi=OSL_SWAPDWORD (rVect.OfsHi);
-#endif
+    sal_uInt64 const nOldPos(rIStream.Tell());
+    rIStream.ReadUInt16(rVect.Flag);
+    rIStream.ReadInt16(rVect.x);
+    rIStream.ReadInt16(rVect.y);
+    rIStream.ReadUInt16(rVect.OfsLo);
+    rIStream.ReadUInt16(rVect.OfsHi);
+    assert(rIStream.GetError() || rIStream.Tell() == nOldPos + SgfVectorSize);
     return rIStream;
 }
 
 SvStream& WriteBmpFileHeader(SvStream& rOStream, BmpFileHeader& rHead)
 {
-#if defined OSL_BIGENDIAN
-    rHead.Typ     =OSL_SWAPWORD(rHead.Typ     );
-    rHead.SizeLo  =OSL_SWAPWORD(rHead.SizeLo  );
-    rHead.SizeHi  =OSL_SWAPWORD(rHead.SizeHi  );
-    rHead.Reserve1=OSL_SWAPWORD(rHead.Reserve1);
-    rHead.Reserve2=OSL_SWAPWORD(rHead.Reserve2);
-    rHead.OfsLo   =OSL_SWAPWORD(rHead.OfsLo   );
-    rHead.OfsHi   =OSL_SWAPWORD(rHead.OfsHi   );
-#endif
-    rOStream.Write(&rHead, sizeof(rHead));
-#if defined OSL_BIGENDIAN
-    rHead.Typ     =OSL_SWAPWORD(rHead.Typ     );
-    rHead.SizeLo  =OSL_SWAPWORD(rHead.SizeLo  );
-    rHead.SizeHi  =OSL_SWAPWORD(rHead.SizeHi  );
-    rHead.Reserve1=OSL_SWAPWORD(rHead.Reserve1);
-    rHead.Reserve2=OSL_SWAPWORD(rHead.Reserve2);
-    rHead.OfsLo   =OSL_SWAPWORD(rHead.OfsLo   );
-    rHead.OfsHi   =OSL_SWAPWORD(rHead.OfsHi   );
-#endif
+    sal_uInt64 const nOldPos(rOStream.Tell());
+    rOStream.WriteUInt16(rHead.Typ);
+    rOStream.WriteUInt16(rHead.SizeLo);
+    rOStream.WriteUInt16(rHead.SizeHi);
+    rOStream.WriteUInt16(rHead.Reserve1);
+    rOStream.WriteUInt16(rHead.Reserve2);
+    rOStream.WriteUInt16(rHead.OfsLo);
+    rOStream.WriteUInt16(rHead.OfsHi);
+    assert(rOStream.GetError() || rOStream.Tell() == nOldPos + BmpFileHeaderSize);
     return rOStream;
 }
 
@@ -136,33 +126,19 @@ sal_uInt32 BmpFileHeader::GetOfs()
 
 SvStream& WriteBmpInfoHeader(SvStream& rOStream, BmpInfoHeader& rInfo)
 {
-#if defined OSL_BIGENDIAN
-    rInfo.Size    =OSL_SWAPDWORD (rInfo.Size    );
-    rInfo.Width   =OSL_SWAPDWORD (rInfo.Width   );
-    rInfo.Hight   =OSL_SWAPDWORD (rInfo.Hight   );
-    rInfo.Planes  =OSL_SWAPWORD(rInfo.Planes  );
-    rInfo.PixBits =OSL_SWAPWORD(rInfo.PixBits );
-    rInfo.Compress=OSL_SWAPDWORD (rInfo.Compress);
-    rInfo.ImgSize =OSL_SWAPDWORD (rInfo.ImgSize );
-    rInfo.xDpmm   =OSL_SWAPDWORD (rInfo.xDpmm   );
-    rInfo.yDpmm   =OSL_SWAPDWORD (rInfo.yDpmm   );
-    rInfo.ColUsed =OSL_SWAPDWORD (rInfo.ColUsed );
-    rInfo.ColMust =OSL_SWAPDWORD (rInfo.ColMust );
-#endif
-    rOStream.Write(&rInfo, sizeof(rInfo));
-#if defined OSL_BIGENDIAN
-    rInfo.Size    =OSL_SWAPDWORD (rInfo.Size    );
-    rInfo.Width   =OSL_SWAPDWORD (rInfo.Width   );
-    rInfo.Hight   =OSL_SWAPDWORD (rInfo.Hight   );
-    rInfo.Planes  =OSL_SWAPWORD(rInfo.Planes  );
-    rInfo.PixBits =OSL_SWAPWORD(rInfo.PixBits );
-    rInfo.Compress=OSL_SWAPDWORD (rInfo.Compress);
-    rInfo.ImgSize =OSL_SWAPDWORD (rInfo.ImgSize );
-    rInfo.xDpmm   =OSL_SWAPDWORD (rInfo.xDpmm   );
-    rInfo.yDpmm   =OSL_SWAPDWORD (rInfo.yDpmm   );
-    rInfo.ColUsed =OSL_SWAPDWORD (rInfo.ColUsed );
-    rInfo.ColMust =OSL_SWAPDWORD (rInfo.ColMust );
-#endif
+    sal_uInt64 const nOldPos(rOStream.Tell());
+    rOStream.WriteUInt32(rInfo.Size);
+    rOStream.WriteInt32(rInfo.Width);
+    rOStream.WriteInt32(rInfo.Hight);
+    rOStream.WriteUInt16(rInfo.Planes);
+    rOStream.WriteUInt16(rInfo.PixBits);
+    rOStream.WriteUInt32(rInfo.Compress);
+    rOStream.WriteUInt32(rInfo.ImgSize);
+    rOStream.WriteInt32(rInfo.xDpmm);
+    rOStream.WriteInt32(rInfo.yDpmm);
+    rOStream.WriteUInt32(rInfo.ColUsed);
+    rOStream.WriteUInt32(rInfo.ColMust);
+    assert(rOStream.GetError() || rOStream.Tell() == nOldPos + BmpInfoHeaderSize);
     return rOStream;
 }
 
commit 86b3215240ad9d008df5870cbf692c6986c3b7a1
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Jun 3 16:43:59 2016 +0200

    vcl: "sgv" filter: replace more byteswapping with SvStream methods
    
    Change-Id: Ibc34bb75a77b0dcba491e2c297b59bfb352ca2ef

diff --git a/vcl/source/filter/sgvmain.cxx b/vcl/source/filter/sgvmain.cxx
index bdae296..1d85a980 100644
--- a/vcl/source/filter/sgvmain.cxx
+++ b/vcl/source/filter/sgvmain.cxx
@@ -29,14 +29,6 @@
 #include "sgvspln.hxx"
 #include <unotools/ucbstreamhelper.hxx>
 
-#if defined OSL_BIGENDIAN
-
-#define SWAPPOINT(p) {  \
-    p.x=OSL_SWAPWORD(p.x); \
-    p.y=OSL_SWAPWORD(p.y); }
-
-#endif
-
 //  Restrictions:
 
 //  - area patterns are matched to the available ones in Starview.
@@ -802,10 +794,11 @@ void DrawObjkList( SvStream& rInp, OutputDevice& rOut )
                     ReadPolyType( rInp, aPoly );
                     if (!rInp.GetError()) {
                         aPoly.EckP=new PointType[aPoly.nPoints];
-                        rInp.Read(aPoly.EckP, 4*aPoly.nPoints);
-#if defined OSL_BIGENDIAN
-                        for(short i=0;i<aPoly.nPoints;i++) SWAPPOINT(aPoly.EckP[i]);
-#endif
+                        for (int i = 0; i < aPoly.nPoints; ++i)
+                        {
+                            rInp.ReadInt16(aPoly.EckP[i].x);
+                            rInp.ReadInt16(aPoly.EckP[i].y);
+                        }
                         if (!rInp.GetError()) aPoly.Draw(rOut);
                         delete[] aPoly.EckP;
                     }
@@ -815,10 +808,11 @@ void DrawObjkList( SvStream& rInp, OutputDevice& rOut )
                     ReadSplnType( rInp, aSpln );
                     if (!rInp.GetError()) {
                         aSpln.EckP=new PointType[aSpln.nPoints];
-                        rInp.Read(aSpln.EckP, 4*aSpln.nPoints);
-#if defined OSL_BIGENDIAN
-                        for(short i=0;i<aSpln.nPoints;i++) SWAPPOINT(aSpln.EckP[i]);
-#endif
+                        for (int i = 0; i < aSpln.nPoints; ++i)
+                        {
+                            rInp.ReadInt16(aSpln.EckP[i].x);
+                            rInp.ReadInt16(aSpln.EckP[i].y);
+                        }
                         if (!rInp.GetError()) aSpln.Draw(rOut);
                         delete[] aSpln.EckP;
                     }


More information about the Libreoffice-commits mailing list