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]

Reply via email to