summaryrefslogtreecommitdiff
path: root/basic/source/sbx/sbxbase.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basic/source/sbx/sbxbase.cxx')
-rw-r--r--basic/source/sbx/sbxbase.cxx73
1 files changed, 48 insertions, 25 deletions
diff --git a/basic/source/sbx/sbxbase.cxx b/basic/source/sbx/sbxbase.cxx
index 0e057540c8bc..b90368f68f26 100644
--- a/basic/source/sbx/sbxbase.cxx
+++ b/basic/source/sbx/sbxbase.cxx
@@ -31,12 +31,14 @@
#include <rtl/ustring.hxx>
#include <sal/log.hxx>
+#include <filefmt.hxx>
// AppData-Structure for SBX:
SbxAppData::SbxAppData()
: eErrCode(ERRCODE_NONE)
+ , aErrorMsg(OUString())
, eBasicFormaterLangType(LANGUAGE_DONTKNOW)
{
}
@@ -55,11 +57,7 @@ SbxBase::SbxBase()
nFlags = SbxFlagBits::ReadWrite;
}
-SbxBase::SbxBase( const SbxBase& r )
- : SvRefBase( r )
-{
- nFlags = r.nFlags;
-}
+SbxBase::SbxBase(const SbxBase& r) = default;
SbxBase::~SbxBase()
{
@@ -96,6 +94,21 @@ ErrCode const & SbxBase::GetError()
return GetSbxData_Impl().eErrCode;
}
+OUString const & SbxBase::GetErrorMsg()
+{
+ return GetSbxData_Impl().aErrorMsg;
+}
+
+void SbxBase::SetError(ErrCode e, const OUString& rMsg)
+{
+ SbxAppData& r = GetSbxData_Impl();
+ if (e && r.eErrCode == ERRCODE_NONE)
+ {
+ r.eErrCode = e;
+ r.aErrorMsg = rMsg;
+ }
+}
+
void SbxBase::SetError( ErrCode e )
{
SbxAppData& r = GetSbxData_Impl();
@@ -111,6 +124,7 @@ bool SbxBase::IsError()
void SbxBase::ResetError()
{
GetSbxData_Impl().eErrCode = ERRCODE_NONE;
+ GetSbxData_Impl().aErrorMsg = OUString();
}
void SbxBase::AddFactory( SbxFactory* pFac )
@@ -129,7 +143,7 @@ void SbxBase::RemoveFactory( SbxFactory const * pFac )
}
-SbxBase* SbxBase::Create( sal_uInt16 nSbxId, sal_uInt32 nCreator )
+SbxBaseRef SbxBase::Create( sal_uInt16 nSbxId, sal_uInt32 nCreator )
{
// #91626: Hack to skip old Basic dialogs
// Problem: There does not exist a factory any more,
@@ -153,7 +167,7 @@ SbxBase* SbxBase::Create( sal_uInt16 nSbxId, sal_uInt32 nCreator )
}
// Unknown type: go over the factories!
SbxAppData& r = GetSbxData_Impl();
- SbxBase* pNew = nullptr;
+ SbxBaseRef pNew;
for (auto const& rpFac : r.m_Factories)
{
pNew = rpFac->Create( nSbxId, nCreator );
@@ -164,10 +178,10 @@ SbxBase* SbxBase::Create( sal_uInt16 nSbxId, sal_uInt32 nCreator )
return pNew;
}
-SbxObject* SbxBase::CreateObject( const OUString& rClass )
+SbxObjectRef SbxBase::CreateObject( const OUString& rClass )
{
SbxAppData& r = GetSbxData_Impl();
- SbxObject* pNew = nullptr;
+ SbxObjectRef pNew;
for (auto const& rpFac : r.m_Factories)
{
pNew = rpFac->CreateObject( rClass );
@@ -178,20 +192,29 @@ SbxObject* SbxBase::CreateObject( const OUString& rClass )
return pNew;
}
-SbxBase* SbxBase::Load( SvStream& rStrm )
-{
- sal_uInt16 nSbxId, nFlagsTmp, nVer;
- sal_uInt32 nCreator, nSize;
- rStrm.ReadUInt32( nCreator ).ReadUInt16( nSbxId ).ReadUInt16( nFlagsTmp ).ReadUInt16( nVer );
- SbxFlagBits nFlags = static_cast<SbxFlagBits>(nFlagsTmp);
+namespace {
+// coverity[ -taint_source ]
+[[nodiscard]] SbxFlagBits CorrectFlags(SbxFlagBits nFlags)
+{
// Correcting a foolishness of mine:
- if( nFlags & SbxFlagBits::Reserved )
- nFlags = ( nFlags & ~SbxFlagBits::Reserved ) | SbxFlagBits::GlobalSearch;
+ if (nFlags & SbxFlagBits::Reserved)
+ nFlags |= SbxFlagBits::GlobalSearch;
+ return nFlags & ~SbxFlagBits::Reserved;
+}
+
+}
+
+SbxBaseRef SbxBase::Load( SvStream& rStrm )
+{
+ sal_uInt16 nSbxId(0), nFlagsTmp(0), nVer(0);
+ sal_uInt32 nCreator(0), nSize(0);
+ rStrm.ReadUInt32( nCreator ).ReadUInt16( nSbxId ).ReadUInt16( nFlagsTmp ).ReadUInt16( nVer );
+ SbxFlagBits nFlags = CorrectFlags(static_cast<SbxFlagBits>(nFlagsTmp));
sal_uInt64 nOldPos = rStrm.Tell();
rStrm.ReadUInt32( nSize );
- SbxBase* p = Create( nSbxId, nCreator );
+ SbxBaseRef p = Create( nSbxId, nCreator );
if( p )
{
p->nFlags = nFlags;
@@ -222,7 +245,7 @@ SbxBase* SbxBase::Load( SvStream& rStrm )
return p;
}
-bool SbxBase::Store( SvStream& rStrm )
+std::pair<bool, sal_uInt32> SbxBase::Store( SvStream& rStrm )
{
if( ( nFlags & SbxFlagBits::DontStore ) == SbxFlagBits::NONE )
{
@@ -232,7 +255,7 @@ bool SbxBase::Store( SvStream& rStrm )
.WriteUInt16( GetVersion() );
sal_uInt64 const nOldPos = rStrm.Tell();
rStrm.WriteUInt32( 0 );
- bool bRes = StoreData( rStrm );
+ auto [bRes, nVersion] = StoreData(rStrm);
sal_uInt64 const nNewPos = rStrm.Tell();
rStrm.Seek( nOldPos );
rStrm.WriteUInt32( nNewPos - nOldPos );
@@ -241,10 +264,10 @@ bool SbxBase::Store( SvStream& rStrm )
bRes = false;
if( bRes )
bRes = true;
- return bRes;
+ return { bRes, nVersion };
}
else
- return true;
+ return { true, B_IMG_VERSION_12 };
}
bool SbxBase::LoadCompleted()
@@ -258,12 +281,12 @@ SbxFactory::~SbxFactory()
{
}
-SbxBase* SbxFactory::Create( sal_uInt16, sal_uInt32 )
+SbxBaseRef SbxFactory::Create( sal_uInt16, sal_uInt32 )
{
return nullptr;
}
-SbxObject* SbxFactory::CreateObject( const OUString& )
+SbxObjectRef SbxFactory::CreateObject( const OUString& )
{
return nullptr;
}
@@ -297,7 +320,7 @@ void SbxInfo::LoadData( SvStream& rStrm, sal_uInt16 nVer )
rStrm.ReadUInt32( nHelpId ).ReadUInt16( nParam );
while( nParam-- )
{
- sal_uInt16 nType, nFlagsTmp;
+ sal_uInt16 nType(0), nFlagsTmp(0);
sal_uInt32 nUserData = 0;
OUString aName = read_uInt16_lenPrefixed_uInt8s_ToOUString(rStrm,
RTL_TEXTENCODING_ASCII_US);