diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-05-20 12:54:07 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2022-05-20 19:54:57 +0200 |
commit | 6510cbc486867db25d1d772f4a3b0b7b9bb2fc08 (patch) | |
tree | 629597e0e801659b06edb181bda017cdd823e04b /tools | |
parent | 443799ad8c0f5a2ae78ca03fb38618a2273682aa (diff) |
elide temporary OUStringBuffer in INetURLObject
which requires a version of replaceAt for OUStringBuffer, which I'll put
in comphelper::string:: for now
Change-Id: I70b319b018e29a7dac26965dd92f6c4f9ea470ec
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134679
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source/fsys/urlobj.cxx | 107 |
1 files changed, 54 insertions, 53 deletions
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx index a6f2329e281d..78c6d22af504 100644 --- a/tools/source/fsys/urlobj.cxx +++ b/tools/source/fsys/urlobj.cxx @@ -45,6 +45,7 @@ #include <com/sun/star/uno/Sequence.hxx> #include <comphelper/base64.hxx> +#include <comphelper/string.hxx> using namespace css; @@ -2085,8 +2086,9 @@ bool INetURLObject::convertIntToExt(std::u16string_view rTheIntURIRef, DecodeMechanism eDecodeMechanism, rtl_TextEncoding eCharset) { - OUString aSynExtURIRef(encodeText(rTheIntURIRef, PART_VISIBLE, - EncodeMechanism::NotCanonical, eCharset, true)); + OUStringBuffer aSynExtURIRef(256); + encodeText(aSynExtURIRef, rTheIntURIRef, PART_VISIBLE, + EncodeMechanism::NotCanonical, eCharset, true); sal_Unicode const * pBegin = aSynExtURIRef.getStr(); sal_Unicode const * pEnd = pBegin + aSynExtURIRef.getLength(); sal_Unicode const * p = pBegin; @@ -2094,8 +2096,7 @@ bool INetURLObject::convertIntToExt(std::u16string_view rTheIntURIRef, bool bConvert = pPrefix && pPrefix->m_eKind == PrefixInfo::Kind::Internal; if (bConvert) { - aSynExtURIRef = - aSynExtURIRef.replaceAt(0, p - pBegin, + comphelper::string::replaceAt(aSynExtURIRef, 0, p - pBegin, OUString::createFromAscii(pPrefix->m_pTranslatedPrefix)); } rTheExtURIRef = decode(aSynExtURIRef, eDecodeMechanism, eCharset); @@ -2108,8 +2109,9 @@ bool INetURLObject::convertExtToInt(std::u16string_view rTheExtURIRef, DecodeMechanism eDecodeMechanism, rtl_TextEncoding eCharset) { - OUString aSynIntURIRef(encodeText(rTheExtURIRef, PART_VISIBLE, - EncodeMechanism::NotCanonical, eCharset, true)); + OUStringBuffer aSynIntURIRef(256); + encodeText(aSynIntURIRef, rTheExtURIRef, PART_VISIBLE, + EncodeMechanism::NotCanonical, eCharset, true); sal_Unicode const * pBegin = aSynIntURIRef.getStr(); sal_Unicode const * pEnd = pBegin + aSynIntURIRef.getLength(); sal_Unicode const * p = pBegin; @@ -2117,9 +2119,8 @@ bool INetURLObject::convertExtToInt(std::u16string_view rTheExtURIRef, bool bConvert = pPrefix && pPrefix->m_eKind == PrefixInfo::Kind::External; if (bConvert) { - aSynIntURIRef = - aSynIntURIRef.replaceAt(0, p - pBegin, - OUString::createFromAscii(pPrefix->m_pTranslatedPrefix)); + comphelper::string::replaceAt(aSynIntURIRef, 0, p - pBegin, + OUString::createFromAscii(pPrefix->m_pTranslatedPrefix)); } rTheIntURIRef = decode(aSynIntURIRef, eDecodeMechanism, eCharset); return bConvert; @@ -2288,8 +2289,9 @@ bool INetURLObject::setUser(std::u16string_view rTheUser, return false; } - OUString aNewUser(encodeText(rTheUser, PART_USER_PASSWORD, - EncodeMechanism::WasEncoded, eCharset, false)); + OUStringBuffer aNewUser; + encodeText(aNewUser, rTheUser, PART_USER_PASSWORD, + EncodeMechanism::WasEncoded, eCharset, false); sal_Int32 nDelta; if (m_aUser.isPresent()) nDelta = m_aUser.set(m_aAbsURIRef, aNewUser); @@ -2343,8 +2345,9 @@ bool INetURLObject::setPassword(std::u16string_view rThePassword, { if (!getSchemeInfo().m_bPassword) return false; - OUString aNewAuth(encodeText(rThePassword, PART_USER_PASSWORD, - EncodeMechanism::WasEncoded, eCharset, false)); + OUStringBuffer aNewAuth; + encodeText(aNewAuth, rThePassword, PART_USER_PASSWORD, + EncodeMechanism::WasEncoded, eCharset, false); sal_Int32 nDelta; if (m_aAuth.isPresent()) nDelta = m_aAuth.set(m_aAbsURIRef, aNewAuth); @@ -3355,8 +3358,8 @@ bool INetURLObject::insertName(std::u16string_view rTheName, OUStringBuffer aNewPath(256); aNewPath.append(pPathBegin, pPrefixEnd - pPathBegin); aNewPath.append('/'); - aNewPath.append(encodeText(rTheName, PART_PCHAR, - eMechanism, eCharset, true)); + encodeText(aNewPath, rTheName, PART_PCHAR, + eMechanism, eCharset, true); if (bInsertSlash) { aNewPath.append('/'); } @@ -3384,8 +3387,9 @@ bool INetURLObject::setQuery(std::u16string_view rTheQuery, { if (!getSchemeInfo().m_bQuery) return false; - OUString aNewQuery(encodeText(rTheQuery, PART_URIC, - eMechanism, eCharset, true)); + OUStringBuffer aNewQuery; + encodeText(aNewQuery, rTheQuery, PART_URIC, + eMechanism, eCharset, true); sal_Int32 nDelta; if (m_aQuery.isPresent()) nDelta = m_aQuery.set(m_aAbsURIRef, aNewQuery); @@ -3417,8 +3421,9 @@ bool INetURLObject::setFragment(std::u16string_view rTheFragment, { if (HasError()) return false; - OUString aNewFragment(encodeText(rTheFragment, PART_URIC, - eMechanism, eCharset, true)); + OUStringBuffer aNewFragment; + encodeText(aNewFragment, rTheFragment, PART_URIC, + eMechanism, eCharset, true); if (m_aFragment.isPresent()) m_aFragment.set(m_aAbsURIRef, aNewFragment); else @@ -3441,22 +3446,21 @@ bool INetURLObject::hasDosVolume(FSysStyle eStyle) const } // static -OUString INetURLObject::encodeText(sal_Unicode const * pBegin, - sal_Unicode const * pEnd, - Part ePart, EncodeMechanism eMechanism, - rtl_TextEncoding eCharset, - bool bKeepVisibleEscapes) +void INetURLObject::encodeText( OUStringBuffer& rOutputBuffer, + sal_Unicode const * pBegin, + sal_Unicode const * pEnd, + Part ePart, EncodeMechanism eMechanism, + rtl_TextEncoding eCharset, + bool bKeepVisibleEscapes) { - OUStringBuffer aResult(256); while (pBegin < pEnd) { EscapeType eEscapeType; sal_uInt32 nUTF32 = getUTF32(pBegin, pEnd, eMechanism, eCharset, eEscapeType); - appendUCS4(aResult, nUTF32, eEscapeType, ePart, + appendUCS4(rOutputBuffer, nUTF32, eEscapeType, ePart, eCharset, bKeepVisibleEscapes); } - return aResult.makeStringAndClear(); } // static @@ -3790,10 +3794,10 @@ bool INetURLObject::ConcatData(INetProtocol eTheScheme, { if (!rTheUser.empty()) { - m_aUser.set(m_aAbsURIRef, - encodeText(rTheUser, PART_USER_PASSWORD, - EncodeMechanism::WasEncoded, RTL_TEXTENCODING_UTF8, false), - m_aAbsURIRef.getLength()); + OUStringBuffer aNewUser; + encodeText(aNewUser, rTheUser, PART_USER_PASSWORD, + EncodeMechanism::WasEncoded, RTL_TEXTENCODING_UTF8, false); + m_aUser.set(m_aAbsURIRef, aNewUser, m_aAbsURIRef.getLength()); bUserInfo = true; } } @@ -3807,10 +3811,10 @@ bool INetURLObject::ConcatData(INetProtocol eTheScheme, if (getSchemeInfo().m_bPassword) { m_aAbsURIRef.append(':'); - m_aAuth.set(m_aAbsURIRef, - encodeText(rThePassword, PART_USER_PASSWORD, - EncodeMechanism::WasEncoded, RTL_TEXTENCODING_UTF8, false), - m_aAbsURIRef.getLength()); + OUStringBuffer aNewAuth; + encodeText(aNewAuth, rThePassword, PART_USER_PASSWORD, + EncodeMechanism::WasEncoded, RTL_TEXTENCODING_UTF8, false); + m_aAuth.set(m_aAbsURIRef, aNewAuth, m_aAbsURIRef.getLength()); bUserInfo = true; } else @@ -4101,12 +4105,11 @@ bool INetURLObject::setName(std::u16string_view rTheName, EncodeMechanism eMecha while (p != pSegEnd && *p != ';') ++p; - return setPath( - rtl::OUStringConcatenation(std::u16string_view(pPathBegin, pSegBegin - pPathBegin) - + encodeText(rTheName, PART_PCHAR, eMechanism, eCharset, true) - + std::u16string_view(p, pPathEnd - p)), - EncodeMechanism::NotCanonical, - RTL_TEXTENCODING_UTF8); + OUStringBuffer aNewPath(256); + aNewPath.append(std::u16string_view(pPathBegin, pSegBegin - pPathBegin)); + encodeText(aNewPath, rTheName, PART_PCHAR, eMechanism, eCharset, true); + aNewPath.append(std::u16string_view(p, pPathEnd - p)); + return setPath(aNewPath, EncodeMechanism::NotCanonical, RTL_TEXTENCODING_UTF8); } bool INetURLObject::hasExtension() @@ -4178,12 +4181,11 @@ bool INetURLObject::setBase(std::u16string_view rTheBase, sal_Int32 nIndex, if (!pExtension) pExtension = p; - return setPath( - rtl::OUStringConcatenation(std::u16string_view(pPathBegin, pSegBegin - pPathBegin) - + encodeText(rTheBase, PART_PCHAR, eMechanism, eCharset, true) - + std::u16string_view(pExtension, pPathEnd - pExtension)), - EncodeMechanism::NotCanonical, - RTL_TEXTENCODING_UTF8); + OUStringBuffer aNewPath(256); + aNewPath.append(std::u16string_view(pPathBegin, pSegBegin - pPathBegin)); + encodeText(aNewPath, rTheBase, PART_PCHAR, eMechanism, eCharset, true); + aNewPath.append(std::u16string_view(pExtension, pPathEnd - pExtension)); + return setPath(aNewPath, EncodeMechanism::NotCanonical, RTL_TEXTENCODING_UTF8); } OUString INetURLObject::getExtension(sal_Int32 nIndex, @@ -4238,12 +4240,11 @@ bool INetURLObject::setExtension(std::u16string_view rTheExtension, if (!pExtension) pExtension = p; - return setPath( - rtl::OUStringConcatenation(OUString::Concat(std::u16string_view(pPathBegin, pExtension - pPathBegin)) + "." - + encodeText(rTheExtension, PART_PCHAR, EncodeMechanism::WasEncoded, eCharset, true) - + std::u16string_view(p, pPathEnd - p)), - EncodeMechanism::NotCanonical, - RTL_TEXTENCODING_UTF8); + OUStringBuffer aNewPath(256); + aNewPath.append(OUString::Concat(std::u16string_view(pPathBegin, pExtension - pPathBegin)) + "."); + encodeText(aNewPath, rTheExtension, PART_PCHAR, EncodeMechanism::WasEncoded, eCharset, true); + aNewPath.append(std::u16string_view(p, pPathEnd - p)); + return setPath(aNewPath, EncodeMechanism::NotCanonical, RTL_TEXTENCODING_UTF8); } bool INetURLObject::removeExtension(sal_Int32 nIndex, bool bIgnoreFinalSlash) |