summaryrefslogtreecommitdiffstats
path: root/writerfilter
diff options
context:
space:
mode:
authorHenning Brinkmann <hbrinkm@openoffice.org>2010-02-16 15:21:57 +0100
committerHenning Brinkmann <hbrinkm@openoffice.org>2010-02-16 15:21:57 +0100
commit77a8443fc381591ce33d3a8ea3c8a7991b287aed (patch)
tree60eef19ef36d9e0c97db9eebb7bb5d4e823b6069 /writerfilter
parentwriterfilter07: fixed memory leak in OOXMLPropertyImpl::resolve (diff)
downloadcore-77a8443fc381591ce33d3a8ea3c8a7991b287aed.tar.gz
core-77a8443fc381591ce33d3a8ea3c8a7991b287aed.zip
writerfilter07: fixed memory leak related to FontEntry/FontTable
Diffstat (limited to 'writerfilter')
-rwxr-xr-xwriterfilter/source/dmapper/DomainMapper.cxx2
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx2
-rw-r--r--writerfilter/source/dmapper/FontTable.cxx17
-rw-r--r--writerfilter/source/dmapper/FontTable.hxx5
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx6
5 files changed, 17 insertions, 15 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 2e4f253ecf4c..1dc49f997794 100755
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3044,7 +3044,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
eFontPitch = PROP_CHAR_FONT_PITCH_COMPLEX;
break;
}
- const FontEntry* pFontEntry = pFontTable->getFontEntry(sal_uInt32(nIntValue));
+ const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(nIntValue)));
rContext->Insert(eFontName, true, uno::makeAny( pFontEntry->sFontName ));
// rContext->Insert(eFontStyle, uno::makeAny( pFontEntry-> ));
// rContext->Insert(eFontFamily, uno::makeAny( pFontEntry-> ));
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index c724a1c76e68..828246513561 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -1370,7 +1370,7 @@ void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote )
uno::Sequence< beans::PropertyValue > aFontProperties;
if( pFontTable && pTopContext->GetFootnoteFontId() >= 0 && pFontTable->size() > (size_t)pTopContext->GetFootnoteFontId() )
{
- const FontEntry* pFontEntry = pFontTable->getFontEntry(sal_uInt32(pTopContext->GetFootnoteFontId()));
+ const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(pTopContext->GetFootnoteFontId())));
PropertyMapPtr aFontProps( new PropertyMap );
aFontProps->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( pFontEntry->sFontName ));
aFontProps->Insert(PROP_CHAR_FONT_CHAR_SET, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding ));
diff --git a/writerfilter/source/dmapper/FontTable.cxx b/writerfilter/source/dmapper/FontTable.cxx
index 8d7071d16be1..7ccedccf8212 100644
--- a/writerfilter/source/dmapper/FontTable.cxx
+++ b/writerfilter/source/dmapper/FontTable.cxx
@@ -42,10 +42,9 @@ namespace dmapper
struct FontTable_Impl
{
- std::vector< FontEntry > aFontEntries;
- FontEntry* pCurrentEntry;
- FontTable_Impl() :
- pCurrentEntry(0){}
+ std::vector< FontEntry > aFontEntries;
+ FontEntry::Pointer_t pCurrentEntry;
+ FontTable_Impl() {}
};
/*-- 19.06.2006 12:04:32---------------------------------------------------
@@ -569,11 +568,11 @@ void FontTable::entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_
{
//create a new font entry
OSL_ENSURE( !m_pImpl->pCurrentEntry, "current entry has to be NULL here");
- m_pImpl->pCurrentEntry = new FontEntry ;
+ m_pImpl->pCurrentEntry.reset(new FontEntry);
ref->resolve(*this);
//append it to the table
m_pImpl->aFontEntries.push_back( *m_pImpl->pCurrentEntry );
- m_pImpl->pCurrentEntry = 0;
+ m_pImpl->pCurrentEntry.reset();
}
/*-- 19.06.2006 12:04:34---------------------------------------------------
@@ -659,12 +658,12 @@ void FontTable::endShape( )
/*-- 21.06.2006 11:21:38---------------------------------------------------
-----------------------------------------------------------------------*/
-const FontEntry* FontTable::getFontEntry(sal_uInt32 nIndex)
+const FontEntry::Pointer_t FontTable::getFontEntry(sal_uInt32 nIndex)
{
- const FontEntry* pRet = 0;
+ FontEntry::Pointer_t pRet;
if(m_pImpl->aFontEntries.size() > nIndex)
{
- pRet = &m_pImpl->aFontEntries[nIndex];
+ pRet.reset(&m_pImpl->aFontEntries[nIndex]);
}
return pRet;
}
diff --git a/writerfilter/source/dmapper/FontTable.hxx b/writerfilter/source/dmapper/FontTable.hxx
index b47374d2b0f9..e67e2ba1d9ed 100644
--- a/writerfilter/source/dmapper/FontTable.hxx
+++ b/writerfilter/source/dmapper/FontTable.hxx
@@ -31,6 +31,7 @@
#ifndef INCLUDED_FONTTABLE_HXX
#define INCLUDED_FONTTABLE_HXX
+#include <boost/shared_ptr.hpp>
#include <WriterFilterDllApi.hxx>
#include <resourcemodel/WW8ResourceModel.hxx>
#include <com/sun/star/lang/XComponent.hpp>
@@ -42,6 +43,8 @@ namespace dmapper
struct FontTable_Impl;
struct FontEntry
{
+ typedef boost::shared_ptr<FontEntry> Pointer_t;
+
::rtl::OUString sFontName;
::rtl::OUString sFontName1;
bool bTrueType;
@@ -100,7 +103,7 @@ public:
virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
virtual void endShape( );
- const FontEntry* getFontEntry(sal_uInt32 nIndex);
+ const FontEntry::Pointer_t getFontEntry(sal_uInt32 nIndex);
sal_uInt32 size();
};
typedef boost::shared_ptr< FontTable > FontTablePtr;
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index d851500ba1e8..9cafe6b640a4 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -862,18 +862,18 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
// font size to 240 twip (12 pts) for all if not set
pEntry->pProperties->Insert(PROP_CHAR_HEIGHT, true, aTwoHundredFortyTwip, false);
// western font not already set -> apply first font
- const FontEntry* pWesternFontEntry = rFontTable->getFontEntry( 0 );
+ const FontEntry::Pointer_t pWesternFontEntry(rFontTable->getFontEntry( 0 ));
rtl::OUString sWesternFontName = pWesternFontEntry->sFontName;
pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sWesternFontName ), false);
// CJK ... apply second font
- const FontEntry* pCJKFontEntry = rFontTable->getFontEntry( 2 );
+ const FontEntry::Pointer_t pCJKFontEntry(rFontTable->getFontEntry( 2 ));
pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_ASIAN, true, uno::makeAny( pCJKFontEntry->sFontName ), false);
pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_ASIAN, true, aTwoHundredFortyTwip, false);
// CTL ... apply third font, if available
if( nFontCount > 3 )
{
- const FontEntry* pCTLFontEntry = rFontTable->getFontEntry( 3 );
+ const FontEntry::Pointer_t pCTLFontEntry(rFontTable->getFontEntry( 3 ));
pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( pCTLFontEntry->sFontName ), false);
pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_COMPLEX, true, aTwoHundredFortyTwip, false);
}