Tag: cws_src680_dba24c User: fs Date: 2007-10-26 12:34:23+0000 Modified: dba/dbaccess/source/core/dataaccess/ModelImpl.cxx
Log: some more safety in lcl_hasObjectsWithMacros_nothrow File Changes: Directory: /dba/dbaccess/source/core/dataaccess/ ================================================ File [changed]: ModelImpl.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/ModelImpl.cxx?r1=1.19.22.5&r2=1.19.22.6 Delta lines: +20 -6 -------------------- --- ModelImpl.cxx 2007-10-25 08:43:57+0000 1.19.22.5 +++ ModelImpl.cxx 2007-10-26 12:34:20+0000 1.19.22.6 @@ -4,9 +4,9 @@ * * $RCSfile: ModelImpl.cxx,v $ * - * $Revision: 1.19.22.5 $ + * $Revision: 1.19.22.6 $ * - * last change: $Author: fs $ $Date: 2007/10/25 08:43:57 $ + * last change: $Author: fs $ $Date: 2007/10/26 12:34:20 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -463,6 +463,8 @@ { ::utl::SharedUNOComponent< XStorage > xContainerStorage( _rModel.getStorage( _rModel.getObjectContainerStorageName( _eType ), ElementModes::READ ) ); + if ( !xContainerStorage.is() ) + return false; for ( ODefinitionContainer_Impl::const_iterator object = rObjectDefinitions.begin(); ( object != rObjectDefinitions.end() ) && !bSomeDocHasMacros; @@ -480,6 +482,9 @@ catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); + // be on the safe side: If we can't reliably determine whether there are macros, + // assume there actually are. Better this way, than the other way round. + bSomeDocHasMacros = true; } return bSomeDocHasMacros; @@ -758,7 +763,7 @@ return getDocumentStorageAccess(); } // ----------------------------------------------------------------------------- -Reference<XStorage> ODatabaseModelImpl::getStorage(const ::rtl::OUString& _sStorageName,sal_Int32 nMode) +Reference<XStorage> ODatabaseModelImpl::getStorage( const ::rtl::OUString& _sStorageName, sal_Int32 _nMode ) { OSL_ENSURE(_sStorageName.getLength(),"ODatabaseModelImpl::getStorage: Invalid storage name!"); Reference<XStorage> xStorage; @@ -770,15 +775,24 @@ Reference< XStorage > xMyStorage( getStorage() ); if ( xMyStorage.is() ) { - xStorage = xMyStorage->openStorageElement( _sStorageName, m_bDocumentReadOnly ? ElementModes::READ : nMode ); - Reference<XTransactionBroadcaster> xBroad(xStorage,UNO_QUERY); + sal_Int32 nMode = m_bDocumentReadOnly ? ElementModes::READ : _nMode; + if ( nMode == ElementModes::READ ) + { + Reference< XNameAccess > xSubStorageNames( xMyStorage, UNO_QUERY ); + if ( xSubStorageNames.is() && !xSubStorageNames->hasByName( _sStorageName ) ) + return xStorage; + } + + xStorage = xMyStorage->openStorageElement( _sStorageName, nMode ); + Reference< XTransactionBroadcaster > xBroad( xStorage, UNO_QUERY ); if ( xBroad.is() ) xBroad->addTransactionListener( getDocumentStorageAccess() ); - aFind = m_aStorages.insert(TStorages::value_type(_sStorageName,xStorage)).first; + aFind = m_aStorages.insert( TStorages::value_type( _sStorageName, xStorage ) ).first; } } catch( const Exception& ) { + DBG_UNHANDLED_EXCEPTION(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
