summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-01-20 21:09:29 +0000
committerCaolán McNamara <caolanm@redhat.com>2018-01-21 21:16:31 +0100
commit6d6421d3e66aa012cd0ca0d903c3825e4212c643 (patch)
tree6ddf19b25bf1ad64985fc859a769258656bbf877 /lotuswordpro
parent398b0195b7833ca8fab29a600954c84527b25cf9 (diff)
rework to remove intermediate stream
Change-Id: I6ff66cf6ea6ac38f7c36da7668b612b2062e4852 Reviewed-on: https://gerrit.libreoffice.org/48257 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'lotuswordpro')
-rw-r--r--lotuswordpro/source/filter/bencont.cxx18
-rw-r--r--lotuswordpro/source/filter/bento.hxx2
-rw-r--r--lotuswordpro/source/filter/lwpgrfobj.cxx25
3 files changed, 15 insertions, 30 deletions
diff --git a/lotuswordpro/source/filter/bencont.cxx b/lotuswordpro/source/filter/bencont.cxx
index 71eda29213bd..c4125971d089 100644
--- a/lotuswordpro/source/filter/bencont.cxx
+++ b/lotuswordpro/source/filter/bencont.cxx
@@ -267,11 +267,12 @@ sal_uInt64 GetSvStreamSize(SvStream * pStream)
* Find hazily according to object ID
* @param pObjectname - format as "GrXX,XXXXXXXX" wherein XX is high part of object ID, and XXXXXXXX is low part
*/
-SvMemoryStream* LtcBenContainer::CreateGraphicStream(const char *pObjectName)
+std::vector<sal_uInt8> LtcBenContainer::GetGraphicData(const char *pObjectName)
{
+ std::vector<sal_uInt8> aData;
if (!pObjectName)
{
- return nullptr;
+ return aData;
}
// construct the string of property name
char sSName[64]="";
@@ -300,12 +301,11 @@ SvMemoryStream* LtcBenContainer::CreateGraphicStream(const char *pObjectName)
// the 'D' stream is NULL or it has invalid length
if (nLen <= 0)
{
- return nullptr;
+ return aData;
}
- char * pBuf = new char[nLen];
- assert(pBuf != nullptr);
- char * pPointer = pBuf;
+ aData.resize(nLen);
+ sal_uInt8* pPointer = aData.data();
if (xD)
{
xD->ReadBytes(pPointer, nDLen);
@@ -318,11 +318,7 @@ SvMemoryStream* LtcBenContainer::CreateGraphicStream(const char *pObjectName)
xS.reset();
}
- SvMemoryStream* pMemStream = new SvMemoryStream(pBuf, nLen, StreamMode::READ);
- assert(pMemStream != nullptr);
- pMemStream->ObjectOwnsMemory(true);
-
- return pMemStream;
+ return aData;
}
sal_uLong LtcBenContainer::remainingSize() const
diff --git a/lotuswordpro/source/filter/bento.hxx b/lotuswordpro/source/filter/bento.hxx
index f1cd48b4abae..4608b9b21996 100644
--- a/lotuswordpro/source/filter/bento.hxx
+++ b/lotuswordpro/source/filter/bento.hxx
@@ -221,7 +221,7 @@ public: // Internal methods
LtcUtBenValueStream * FindNextValueStreamWithPropertyName(const char * sPropertyName);
LtcUtBenValueStream * FindValueStreamWithPropertyName(const char * sPropertyName);
- SvMemoryStream* CreateGraphicStream(const char *pObjectName);
+ std::vector<sal_uInt8> GetGraphicData(const char *pObjectName);
sal_uLong GetSize() const { return m_ulLength; }
private: // Data
diff --git a/lotuswordpro/source/filter/lwpgrfobj.cxx b/lotuswordpro/source/filter/lwpgrfobj.cxx
index 30431b7a1bb3..f0e355125249 100644
--- a/lotuswordpro/source/filter/lwpgrfobj.cxx
+++ b/lotuswordpro/source/filter/lwpgrfobj.cxx
@@ -302,14 +302,13 @@ void LwpGraphicObject::CreateDrawObjects()
GetBentoNamebyID(rMyID, aGrfObjName);
// get bento stream by the name
- SvStream* pDrawObjStream = pBentoContainer->CreateGraphicStream(aGrfObjName.c_str());
- if (pDrawObjStream)
+ std::vector<sal_uInt8> aData = pBentoContainer->GetGraphicData(aGrfObjName.c_str());
+ if (!aData.empty())
{
- LwpSdwFileLoader fileLoader(pDrawObjStream, this);
- fileLoader.CreateDrawObjects(&m_vXFDrawObjects);
+ SvMemoryStream aDrawObjStream(aData.data(), aData.size(), StreamMode::READ);
- delete pDrawObjStream;
- pDrawObjStream = nullptr;
+ LwpSdwFileLoader fileLoader(&aDrawObjStream, this);
+ fileLoader.CreateDrawObjects(&m_vXFDrawObjects);
}
}
@@ -352,18 +351,8 @@ std::vector<sal_uInt8> LwpGraphicObject::GetRawGrafData()
std::string aGrfObjName;
GetBentoNamebyID(rMyID, aGrfObjName);
- // get bento stream by the name
- SvMemoryStream* pMemGrafStream = pBentoContainer->CreateGraphicStream(aGrfObjName.c_str());
- if (pMemGrafStream)
- {
- // read image data
- aGrafData.resize(pMemGrafStream->GetEndOfData());
- pMemGrafStream->ReadBytes(aGrafData.data(), aGrafData.size());
-
- delete pMemGrafStream;
- }
-
- return aGrafData;
+ // get bento stream by the name and read image data
+ return pBentoContainer->GetGraphicData(aGrfObjName.c_str());
}
/**