diff options
Diffstat (limited to 'dbaccess/source/core/misc/dsntypes.cxx')
-rw-r--r-- | dbaccess/source/core/misc/dsntypes.cxx | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/dbaccess/source/core/misc/dsntypes.cxx b/dbaccess/source/core/misc/dsntypes.cxx index 2758b0a6ed6a..6a081c47a1f7 100644 --- a/dbaccess/source/core/misc/dsntypes.cxx +++ b/dbaccess/source/core/misc/dsntypes.cxx @@ -17,14 +17,17 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <config_java.h> #include <dsntypes.hxx> #include <unotools/confignode.hxx> +#include <o3tl/safeint.hxx> #include <o3tl/string_view.hxx> #include <osl/diagnose.h> #include <tools/wldcrd.hxx> #include <osl/file.hxx> #include <officecfg/Office/Common.hxx> #include <comphelper/string.hxx> +#include <utility> namespace dbaccess { @@ -32,17 +35,16 @@ namespace dbaccess using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; - using namespace ::com::sun::star::lang; namespace { - void lcl_extractHostAndPort(const OUString& _sUrl,OUString& _sHostname,sal_Int32& _nPortNumber) + void lcl_extractHostAndPort(std::u16string_view _sUrl, OUString& _sHostname, sal_Int32& _nPortNumber) { if ( comphelper::string::getTokenCount(_sUrl, ':') >= 2 ) { sal_Int32 nPos {0}; - _sHostname = _sUrl.getToken(0, ':', nPos); - _nPortNumber = _sUrl.getToken(0, ':', nPos).toInt32(); + _sHostname = o3tl::getToken(_sUrl, 0, ':', nPos); + _nPortNumber = o3tl::toInt32(o3tl::getToken(_sUrl, 0, ':', nPos)); } } } @@ -84,7 +86,7 @@ OUString ODsnTypeCollection::cutPrefix(std::u16string_view _sURL) const OUString sOldPattern; // on Windows or with gen rendering, the urls may begin with an ~ - const OUString& sCleanURL = comphelper::string::stripStart(_sURL, '~'); + std::u16string_view sCleanURL = comphelper::string::stripStart(_sURL, '~'); for (auto const& dsnPrefix : m_aDsnPrefixes) { @@ -95,8 +97,8 @@ OUString ODsnTypeCollection::cutPrefix(std::u16string_view _sURL) const // foo* // that is, the very concept of "prefix" applies. OUString prefix(comphelper::string::stripEnd(dsnPrefix, '*')); - OSL_ENSURE(prefix.getLength() <= sCleanURL.getLength(), "How can A match B when A shorter than B?"); - sRet = sCleanURL.copy(prefix.getLength()); + OSL_ENSURE(o3tl::make_unsigned(prefix.getLength()) <= sCleanURL.size(), "How can A match B when A shorter than B?"); + sRet = sCleanURL.substr(prefix.getLength()); sOldPattern = dsnPrefix; } } @@ -104,7 +106,7 @@ OUString ODsnTypeCollection::cutPrefix(std::u16string_view _sURL) const return sRet; } -OUString ODsnTypeCollection::getPrefix(const OUString& _sURL) const +OUString ODsnTypeCollection::getPrefix(std::u16string_view _sURL) const { OUString sRet; OUString sOldPattern; @@ -117,7 +119,7 @@ OUString ODsnTypeCollection::getPrefix(const OUString& _sURL) const // foo* // that is, the very concept of "prefix" applies. sRet = comphelper::string::stripEnd(dsnPrefix, '*'); - OSL_ENSURE(sRet.getLength() <= _sURL.getLength(), "How can A match B when A shorter than B?"); + OSL_ENSURE(sRet.getLength() <= static_cast<sal_Int32>(_sURL.size()), "How can A match B when A shorter than B?"); sOldPattern = dsnPrefix; } } @@ -226,8 +228,7 @@ void ODsnTypeCollection::extractHostNamePort(const OUString& _rDsn,OUString& _sD _rsHostname = sUrl.getToken(0,'/'); _sDatabaseName = sUrl.copy(sUrl.lastIndexOf('/')+1); } - else if ( _rDsn.startsWithIgnoreAsciiCase("sdbc:ado:access:Provider=Microsoft.ACE.OLEDB.12.0;DATA SOURCE=") - || _rDsn.startsWithIgnoreAsciiCase("sdbc:ado:access:PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=") ) + else if ( _rDsn.startsWithIgnoreAsciiCase("sdbc:ado:access:")) { OUString sNewFileName; if ( ::osl::FileBase::getFileURLFromSystemPath( sUrl, sNewFileName ) == ::osl::FileBase::E_None ) @@ -286,7 +287,7 @@ bool ODsnTypeCollection::isEmbeddedDatabase( std::u16string_view _sURL ) OUString ODsnTypeCollection::getEmbeddedDatabase() { - if (officecfg::Office::Common::Misc::ExperimentalMode::get()) + if (!HAVE_FEATURE_JAVA || officecfg::Office::Common::Misc::ExperimentalMode::get()) return "sdbc:embedded:firebird"; else return "sdbc:embedded:hsqldb"; @@ -321,6 +322,9 @@ DATASOURCE_TYPE ODsnTypeCollection::determineType(std::u16string_view _rDsn) con if (sDsn.equalsIgnoreAsciiCase("sdbc:embedded:firebird")) return DST_EMBEDDED_FIREBIRD; + if (sDsn.startsWithIgnoreAsciiCase("sdbc:embedded:")) + return DST_EMBEDDED_UNKNOWN; + // find second : nSeparator = sDsn.indexOf(u':', nSeparator + 1); if (-1 == nSeparator) @@ -334,10 +338,7 @@ DATASOURCE_TYPE ODsnTypeCollection::determineType(std::u16string_view _rDsn) con { if (sDsn.startsWithIgnoreAsciiCase("sdbc:ado:access:")) { - if (sDsn.startsWithIgnoreAsciiCase("sdbc:ado:access:Provider=Microsoft.ACE.OLEDB.12.0;")) - return DST_MSACCESS_2007; - else - return DST_MSACCESS; + return DST_MSACCESS; } return DST_ADO; } @@ -348,8 +349,8 @@ DATASOURCE_TYPE ODsnTypeCollection::determineType(std::u16string_view _rDsn) con const DATASOURCE_TYPE eType; const bool bMatchComplete; - KnownPrefix( const OUString &_s, const DATASOURCE_TYPE _t, const bool _m ) - :sPrefix( _s ) + KnownPrefix( OUString _s, const DATASOURCE_TYPE _t, const bool _m ) + :sPrefix(std::move( _s )) ,eType ( _t ) ,bMatchComplete( _m ) { @@ -443,11 +444,13 @@ void ODsnTypeCollection::fillPageIds(std::u16string_view _sURL,std::vector<sal_I case DST_ORACLE_JDBC: _rOutPathIds.push_back(PAGE_DBSETUPWIZARD_ORACLE); break; + case DST_POSTGRES: + _rOutPathIds.push_back(PAGE_DBSETUPWIZARD_POSTGRES); + break; case DST_LDAP: _rOutPathIds.push_back(PAGE_DBSETUPWIZARD_LDAP); break; case DST_MSACCESS: - case DST_MSACCESS_2007: _rOutPathIds.push_back(PAGE_DBSETUPWIZARD_MSACCESS); break; case DST_OUTLOOKEXP: @@ -461,6 +464,7 @@ void ODsnTypeCollection::fillPageIds(std::u16string_view _sURL,std::vector<sal_I case DST_MACAB: case DST_EMBEDDED_HSQLDB: case DST_EMBEDDED_FIREBIRD: + case DST_EMBEDDED_UNKNOWN: break; default: _rOutPathIds.push_back(PAGE_DBSETUPWIZARD_USERDEFINED); |