[Libreoffice-commits] core.git: dbaccess/source
Caolán McNamara
caolanm at redhat.com
Fri Jul 11 00:50:38 PDT 2014
dbaccess/source/core/dataaccess/databaseregistrations.cxx | 77 +++++++++-----
1 file changed, 52 insertions(+), 25 deletions(-)
New commits:
commit 17ec028be46545c7d67742d7fafe38926fb2dbd5
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jul 10 17:37:03 2014 +0100
coverity#706461 Uncaught exception
and
coverity#706460 Uncaught exception
coverity#706458 Uncaught exception
Change-Id: I580e4dbcb1c65404fe7e93098eb44b5d5d004e8b
diff --git a/dbaccess/source/core/dataaccess/databaseregistrations.cxx b/dbaccess/source/core/dataaccess/databaseregistrations.cxx
index 56142a3..4b7f702 100644
--- a/dbaccess/source/core/dataaccess/databaseregistrations.cxx
+++ b/dbaccess/source/core/dataaccess/databaseregistrations.cxx
@@ -94,8 +94,12 @@ namespace dbaccess
virtual void SAL_CALL removeDatabaseRegistrationsListener( const Reference< XDatabaseRegistrationsListener >& Listener ) throw (RuntimeException, std::exception) SAL_OVERRIDE;
private:
+ void
+ impl_checkValidName_common(const OUString& _rName);
::utl::OConfigurationNode
- impl_checkValidName_throw( const OUString& _rName, const bool _bMustExist );
+ impl_checkValidName_throw_must_exist(const OUString& _rName);
+ ::utl::OConfigurationNode
+ impl_checkValidName_throw_must_not_exist(const OUString& _rName);
void impl_checkValidLocation_throw( const OUString& _rLocation );
@@ -105,21 +109,30 @@ namespace dbaccess
simply do a "getByName" (equivalent) when we want to retrieve the node for a given registration name.
Instead, we must search all nodes.
- If _bMustExist is <TRUE/>, and a node with the given display name does not exist, then a NoSuchElementException
- is thrown.
+ If a node with the given display name does not exist, then a NoSuchElementException is thrown.
+
+ If no exception is thrown, then a valid node is returned: If the node existed it is returned.
+ */
+ ::utl::OConfigurationNode
+ impl_getNodeForName_throw_must_exist(const OUString& _rName);
+
+ /** retrieves the configuration node whose "Name" sub node has the given value
+
+ Since we separated the name of the registration node from the "Name" value of the registration, we cannot
+ simply do a "getByName" (equivalent) when we want to retrieve the node for a given registration name.
+ Instead, we must search all nodes.
- If _bMustExist is <FALSE/>, and a node with the given name already exists, then a ElementExistException is
- thrown.
+ If a node with the given name already exists, then a ElementExistException is thrown.
- In either case, if no exception is thrown, then a valid node is returned: If the node existed and was allowed
- to exist, it is returned, if the node did not yet exist, and was required to not exist, a new node is created.
- However, in this case the root node is not yet committed.
+ If no exception is thrown, then a valid node is returned: If the node did not yet exist a new node is created,
+ in this case the root node is not yet committed.
*/
::utl::OConfigurationNode
- impl_getNodeForName_throw( const OUString& _rName, const bool _bMustExist );
+ impl_getNodeForName_throw_must_not_exist(const OUString& _rName);
+
::utl::OConfigurationNode
- impl_getNodeForName_nothrow( const OUString& _rName );
+ impl_getNodeForName_nothrow(const OUString& _rName);
private:
Reference<XComponentContext> m_aContext;
@@ -159,20 +172,24 @@ namespace dbaccess
return ::utl::OConfigurationNode();
}
- ::utl::OConfigurationNode DatabaseRegistrations::impl_getNodeForName_throw( const OUString& _rName, const bool _bMustExist )
+ ::utl::OConfigurationNode DatabaseRegistrations::impl_getNodeForName_throw_must_exist(const OUString& _rName)
{
::utl::OConfigurationNode aNodeForName( impl_getNodeForName_nothrow( _rName ) );
- if ( aNodeForName.isValid() )
+ if (!aNodeForName.isValid())
{
- if ( !_bMustExist )
- throw ElementExistException( _rName, *this );
-
- return aNodeForName;
+ throw NoSuchElementException( _rName, *this );
}
- if ( _bMustExist )
- throw NoSuchElementException( _rName, *this );
+ return aNodeForName;
+ }
+
+ ::utl::OConfigurationNode DatabaseRegistrations::impl_getNodeForName_throw_must_not_exist(const OUString& _rName)
+ {
+ ::utl::OConfigurationNode aNodeForName( impl_getNodeForName_nothrow( _rName ) );
+
+ if (aNodeForName.isValid())
+ throw ElementExistException( _rName, *this );
OUString sNewNodeName;
{
@@ -198,15 +215,25 @@ namespace dbaccess
return aNewNode;
}
- ::utl::OConfigurationNode DatabaseRegistrations::impl_checkValidName_throw( const OUString& _rName, const bool _bMustExist )
+ void DatabaseRegistrations::impl_checkValidName_common(const OUString& _rName)
{
if ( !m_aConfigurationRoot.isValid() )
throw RuntimeException( OUString(), *this );
if ( _rName.isEmpty() )
throw IllegalArgumentException( OUString(), *this, 1 );
+ }
+
+ ::utl::OConfigurationNode DatabaseRegistrations::impl_checkValidName_throw_must_exist(const OUString& _rName)
+ {
+ impl_checkValidName_common(_rName);
+ return impl_getNodeForName_throw_must_exist(_rName);
+ }
- return impl_getNodeForName_throw( _rName, _bMustExist );
+ ::utl::OConfigurationNode DatabaseRegistrations::impl_checkValidName_throw_must_not_exist(const OUString& _rName)
+ {
+ impl_checkValidName_common(_rName);
+ return impl_getNodeForName_throw_must_not_exist(_rName);
}
void DatabaseRegistrations::impl_checkValidLocation_throw( const OUString& _rLocation )
@@ -252,7 +279,7 @@ namespace dbaccess
{
::osl::MutexGuard aGuard( m_aMutex );
- ::utl::OConfigurationNode aNodeForName = impl_checkValidName_throw( _Name, true );
+ ::utl::OConfigurationNode aNodeForName = impl_checkValidName_throw_must_exist(_Name);
OUString sLocation;
OSL_VERIFY( aNodeForName.getNodeValue( getLocationNodeName() ) >>= sLocation );
@@ -267,7 +294,7 @@ namespace dbaccess
// check
impl_checkValidLocation_throw( _Location );
- ::utl::OConfigurationNode aDataSourceRegistration = impl_checkValidName_throw( _Name, false );
+ ::utl::OConfigurationNode aDataSourceRegistration = impl_checkValidName_throw_must_not_exist(_Name);
// register
aDataSourceRegistration.setNodeValue( getLocationNodeName(), makeAny( _Location ) );
@@ -284,7 +311,7 @@ namespace dbaccess
::osl::ClearableMutexGuard aGuard( m_aMutex );
// check
- ::utl::OConfigurationNode aNodeForName = impl_checkValidName_throw( _Name, true );
+ ::utl::OConfigurationNode aNodeForName = impl_checkValidName_throw_must_exist(_Name);
// obtain properties for notification
OUString sLocation;
@@ -310,7 +337,7 @@ namespace dbaccess
// check
impl_checkValidLocation_throw( _NewLocation );
- ::utl::OConfigurationNode aDataSourceRegistration = impl_checkValidName_throw( _Name, true );
+ ::utl::OConfigurationNode aDataSourceRegistration = impl_checkValidName_throw_must_exist(_Name);
if ( aDataSourceRegistration.isReadonly() )
throw IllegalAccessException( OUString(), *this );
@@ -332,7 +359,7 @@ namespace dbaccess
sal_Bool SAL_CALL DatabaseRegistrations::isDatabaseRegistrationReadOnly( const OUString& _Name ) throw (IllegalArgumentException, NoSuchElementException, RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
- ::utl::OConfigurationNode aDataSourceRegistration = impl_checkValidName_throw( _Name, true );
+ ::utl::OConfigurationNode aDataSourceRegistration = impl_checkValidName_throw_must_exist(_Name);
return aDataSourceRegistration.isReadonly();
}
More information about the Libreoffice-commits
mailing list