tdf#120703 PVS: V547 Expression '!pRTLData' is always false

Let SbiInstance::GetRTLData() return reference

Change-Id: Iafe7e64f6f296b478003ce66ea66936a65ba9edc
Reviewed-on: https://gerrit.libreoffice.org/62855
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
diff --git a/basic/source/inc/runtime.hxx b/basic/source/inc/runtime.hxx
index 5b7c396..754336e 100644
--- a/basic/source/inc/runtime.hxx
+++ b/basic/source/inc/runtime.hxx
@@ -184,7 +184,7 @@
    SbiDdeControl* GetDdeControl() { return pDdeCtrl.get(); }
    StarBASIC* GetBasic() { return pBasic; }
    SbiDllMgr* GetDllMgr();
    SbiRTLData* GetRTLData() const { return const_cast<SbiRTLData*>(&aRTLData); }
    SbiRTLData& GetRTLData() const { return const_cast<SbiRTLData&>(aRTLData); }

    std::shared_ptr<SvNumberFormatter> const & GetNumberFormatter();
    sal_uInt32 GetStdDateIdx() const { return nStdDateIdx; }
diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx
index fc7d149..6d10a1a 100644
--- a/basic/source/runtime/methods.cxx
+++ b/basic/source/runtime/methods.cxx
@@ -2521,15 +2521,15 @@
}

// Function looks for wildcards, removes them and always returns the pure path
static OUString implSetupWildcard( const OUString& rFileParam, SbiRTLData* pRTLData )
static OUString implSetupWildcard(const OUString& rFileParam, SbiRTLData& rRTLData)
{
    static sal_Char cDelim1 = '/';
    static sal_Char cDelim2 = '\\';
    static sal_Char cWild1 = '*';
    static sal_Char cWild2 = '?';

    pRTLData->pWildCard.reset();
    pRTLData->sFullNameToBeChecked.clear();
    rRTLData.pWildCard.reset();
    rRTLData.sFullNameToBeChecked.clear();

    OUString aFileParam = rFileParam;
    sal_Int32 nLastWild = aFileParam.lastIndexOf( cWild1 );
@@ -2558,7 +2558,7 @@
        OUString aPathStr = getFullPath( aFileParam );
        if( nLastDelim != aFileParam.getLength() - 1 )
        {
            pRTLData->sFullNameToBeChecked = aPathStr;
            rRTLData.sFullNameToBeChecked = aPathStr;
        }
        return aPathStr;
    }
@@ -2582,18 +2582,18 @@
    // invalid anyway because it was not accepted by OSL before
    if (aPureFileName != "*")
    {
        pRTLData->pWildCard = o3tl::make_unique<WildCard>( aPureFileName );
        rRTLData.pWildCard = o3tl::make_unique<WildCard>(aPureFileName);
    }
    return aPathStr;
}

static bool implCheckWildcard( const OUString& rName, SbiRTLData const * pRTLData )
static bool implCheckWildcard(const OUString& rName, SbiRTLData const& rRTLData)
{
    bool bMatch = true;

    if( pRTLData->pWildCard )
    if (rRTLData.pWildCard)
    {
        bMatch = pRTLData->pWildCard->Matches( rName );
        bMatch = rRTLData.pWildCard->Matches(rName);
    }
    return bMatch;
}
@@ -2641,14 +2641,8 @@
    }
    else
    {
        SbiRTLData* pRTLData = GetSbData()->pInst->GetRTLData();
        SbiRTLData& rRTLData = GetSbData()->pInst->GetRTLData();

        // #34645: can also be called from the URL line via 'macro: Dir'
        // there's no pRTLDate existing in that case and the method must be left
        if( !pRTLData )
        {
            return;
        }
        if( hasUno() )
        {
            const uno::Reference< ucb::XSimpleFileAccess3 >& xSFI = getFileAccess();
@@ -2658,8 +2652,8 @@
                {
                    OUString aFileParam = rPar.Get(1)->GetOUString();

                    OUString aFileURLStr = implSetupWildcard( aFileParam, pRTLData );
                    if( !pRTLData->sFullNameToBeChecked.isEmpty())
                    OUString aFileURLStr = implSetupWildcard(aFileParam, rRTLData);
                    if (!rRTLData.sFullNameToBeChecked.isEmpty())
                    {
                        bool bExists = false;
                        try { bExists = xSFI->exists( aFileURLStr ); }
@@ -2693,16 +2687,17 @@
                        SbAttributes nFlags = SbAttributes::NONE;
                        if ( nParCount > 2 )
                        {
                            pRTLData->nDirFlags = nFlags = static_cast<SbAttributes>(rPar.Get(2)->GetInteger());
                            rRTLData.nDirFlags = nFlags
                                = static_cast<SbAttributes>(rPar.Get(2)->GetInteger());
                        }
                        else
                        {
                            pRTLData->nDirFlags = SbAttributes::NONE;
                            rRTLData.nDirFlags = SbAttributes::NONE;
                        }
                        // Read directory
                        bool bIncludeFolders = bool(nFlags & SbAttributes::DIRECTORY);
                        pRTLData->aDirSeq = xSFI->getFolderContents( aDirURLStr, bIncludeFolders );
                        pRTLData->nCurDirPos = 0;
                        rRTLData.aDirSeq = xSFI->getFolderContents(aDirURLStr, bIncludeFolders);
                        rRTLData.nCurDirPos = 0;

                        // #78651 Add "." and ".." directories for VB compatibility
                        if( bIncludeFolders )
@@ -2715,7 +2710,7 @@
                            // returned "." and for -1 ".."
                            if( !bRoot )
                            {
                                pRTLData->nCurDirPos = -2;
                                rRTLData.nCurDirPos = -2;
                            }
                        }
                    }
@@ -2725,35 +2720,36 @@
                }


                if( pRTLData->aDirSeq.getLength() > 0 )
                if (rRTLData.aDirSeq.getLength() > 0)
                {
                    bool bFolderFlag = bool(pRTLData->nDirFlags & SbAttributes::DIRECTORY);
                    bool bFolderFlag = bool(rRTLData.nDirFlags & SbAttributes::DIRECTORY);

                    SbiInstance* pInst = GetSbData()->pInst;
                    bool bCompatibility = ( pInst && pInst->IsCompatibility() );
                    for( ;; )
                    {
                        if( pRTLData->nCurDirPos < 0 )
                        if (rRTLData.nCurDirPos < 0)
                        {
                            if( pRTLData->nCurDirPos == -2 )
                            if (rRTLData.nCurDirPos == -2)
                            {
                                aPath = ".";
                            }
                            else if( pRTLData->nCurDirPos == -1 )
                            else if (rRTLData.nCurDirPos == -1)
                            {
                                aPath = "..";
                            }
                            pRTLData->nCurDirPos++;
                            rRTLData.nCurDirPos++;
                        }
                        else if( pRTLData->nCurDirPos >= pRTLData->aDirSeq.getLength() )
                        else if (rRTLData.nCurDirPos >= rRTLData.aDirSeq.getLength())
                        {
                            pRTLData->aDirSeq.realloc( 0 );
                            rRTLData.aDirSeq.realloc(0);
                            aPath.clear();
                            break;
                        }
                        else
                        {
                            OUString aFile = pRTLData->aDirSeq.getConstArray()[pRTLData->nCurDirPos++];
                            OUString aFile
                                = rRTLData.aDirSeq.getConstArray()[rRTLData.nCurDirPos++];

                            if( bCompatibility )
                            {
@@ -2784,7 +2780,7 @@
                                                  INetURLObject::DecodeMechanism::WithCharset );
                        }

                        bool bMatch = implCheckWildcard( aPath, pRTLData );
                        bool bMatch = implCheckWildcard(aPath, rRTLData);
                        if( !bMatch )
                        {
                            continue;
@@ -2802,31 +2798,32 @@
            {
                OUString aFileParam = rPar.Get(1)->GetOUString();

                OUString aDirURL = implSetupWildcard( aFileParam, pRTLData );
                OUString aDirURL = implSetupWildcard(aFileParam, rRTLData);

                SbAttributes nFlags = SbAttributes::NONE;
                if ( nParCount > 2 )
                {
                    pRTLData->nDirFlags = nFlags = static_cast<SbAttributes>( rPar.Get(2)->GetInteger() );
                    rRTLData.nDirFlags = nFlags
                        = static_cast<SbAttributes>(rPar.Get(2)->GetInteger());
                }
                else
                {
                    pRTLData->nDirFlags = SbAttributes::NONE;
                    rRTLData.nDirFlags = SbAttributes::NONE;
                }

                // Read directory
                bool bIncludeFolders = bool(nFlags & SbAttributes::DIRECTORY);
                pRTLData->pDir = o3tl::make_unique<Directory>( aDirURL );
                FileBase::RC nRet = pRTLData->pDir->open();
                rRTLData.pDir = o3tl::make_unique<Directory>(aDirURL);
                FileBase::RC nRet = rRTLData.pDir->open();
                if( nRet != FileBase::E_None )
                {
                    pRTLData->pDir.reset();
                    rRTLData.pDir.reset();
                    rPar.Get(0)->PutString( OUString() );
                    return;
                }

                // #86950 Add "." and ".." directories for VB compatibility
                pRTLData->nCurDirPos = 0;
                rRTLData.nCurDirPos = 0;
                if( bIncludeFolders )
                {
                    bool bRoot = isRootDir( aDirURL );
@@ -2837,36 +2834,36 @@
                    // returned "." and for -1 ".."
                    if( !bRoot )
                    {
                        pRTLData->nCurDirPos = -2;
                        rRTLData.nCurDirPos = -2;
                    }
                }

            }

            if( pRTLData->pDir )
            if (rRTLData.pDir)
            {
                bool bFolderFlag = bool(pRTLData->nDirFlags & SbAttributes::DIRECTORY);
                bool bFolderFlag = bool(rRTLData.nDirFlags & SbAttributes::DIRECTORY);
                for( ;; )
                {
                    if( pRTLData->nCurDirPos < 0 )
                    if (rRTLData.nCurDirPos < 0)
                    {
                        if( pRTLData->nCurDirPos == -2 )
                        if (rRTLData.nCurDirPos == -2)
                        {
                            aPath = ".";
                        }
                        else if( pRTLData->nCurDirPos == -1 )
                        else if (rRTLData.nCurDirPos == -1)
                        {
                            aPath = "..";
                        }
                        pRTLData->nCurDirPos++;
                        rRTLData.nCurDirPos++;
                    }
                    else
                    {
                        DirectoryItem aItem;
                        FileBase::RC nRet = pRTLData->pDir->getNextItem( aItem );
                        FileBase::RC nRet = rRTLData.pDir->getNextItem(aItem);
                        if( nRet != FileBase::E_None )
                        {
                            pRTLData->pDir.reset();
                            rRTLData.pDir.reset();
                            aPath.clear();
                            break;
                        }
@@ -2894,7 +2891,7 @@
                        aPath = aFileStatus.getFileName();
                    }

                    bool bMatch = implCheckWildcard( aPath, pRTLData );
                    bool bMatch = implCheckWildcard(aPath, rRTLData);
                    if( !bMatch )
                    {
                        continue;