basic/source/basmgr/basmgr.cxx | 11 +++++------ dbaccess/source/ui/tabledesign/TableRow.cxx | 8 ++++---- editeng/source/items/legacyitem.cxx | 4 ++-- editeng/source/items/numitem.cxx | 6 +++--- include/tools/stream.hxx | 12 +++++++----- sc/source/core/tool/ddelink.cxx | 7 +++---- sc/source/filter/dif/difexp.cxx | 10 +++++----- sc/source/ui/docshell/docsh.cxx | 12 ++++++------ svl/source/items/stringio.cxx | 5 +---- svtools/source/misc/templatefoldercache.cxx | 4 ++-- tools/source/stream/stream.cxx | 8 +++++++- vcl/source/font/font.cxx | 4 ++-- vcl/source/treelist/transfer.cxx | 4 ++-- 13 files changed, 49 insertions(+), 46 deletions(-)
New commits: commit d235ca35892c8436ac8982a41ed37379be628493 Author: Noel Grandin <[email protected]> AuthorDate: Thu Feb 26 14:16:23 2026 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Fri Feb 27 07:48:47 2026 +0100 SvStream::ReadUniOrByteString should not need to specify encoding Instead, rely on the stream being set into the correct encoding during stream initialisation. Change-Id: I5b015f12f141a89b176c5a22aeecc4336f0b8f13 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200460 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/basic/source/basmgr/basmgr.cxx b/basic/source/basmgr/basmgr.cxx index f7dd92125b33..a98e22979417 100644 --- a/basic/source/basmgr/basmgr.cxx +++ b/basic/source/basmgr/basmgr.cxx @@ -393,15 +393,15 @@ BasicLibInfo* BasicLibInfo::Create( SotStorageStream& rSStream ) pInfo->bDoLoad = bDoLoad; // The name of the lib... - OUString aName = rSStream.ReadUniOrByteString(rSStream.GetStreamEncoding()); + OUString aName = rSStream.ReadUniOrByteString(); pInfo->SetLibName( aName ); // Absolute path... - OUString aStorageName = rSStream.ReadUniOrByteString(rSStream.GetStreamEncoding()); + OUString aStorageName = rSStream.ReadUniOrByteString(); pInfo->SetStorageName( aStorageName ); // Relative path... - OUString aRelStorageName = rSStream.ReadUniOrByteString(rSStream.GetStreamEncoding()); + OUString aRelStorageName = rSStream.ReadUniOrByteString(); pInfo->SetRelStorageName( aRelStorageName ); if ( nVer >= 2 ) @@ -746,7 +746,7 @@ void BasicManager::LoadOldBasicManager( SotStorage& rStorage ) // and it proceeds ... } xManagerStream->Seek( nBasicEndOff+1 ); // +1: 0x00 as separator - OUString aLibs = xManagerStream->ReadUniOrByteString(xManagerStream->GetStreamEncoding()); + OUString aLibs = xManagerStream->ReadUniOrByteString(); xManagerStream->SetBufferSize( 0 ); xManagerStream.clear(); // Close stream @@ -904,8 +904,7 @@ bool BasicManager::ImpLoadLibrary( BasicLibInfo* pLibInfo, SotStorage* pCurStora xBasicStream->ReadUInt32( nPasswordMarker ); if ( ( nPasswordMarker == PASSWORD_MARKER ) && !xBasicStream->eof() ) { - OUString aPassword = xBasicStream->ReadUniOrByteString( - xBasicStream->GetStreamEncoding()); + OUString aPassword = xBasicStream->ReadUniOrByteString(); pLibInfo->SetPassword( aPassword ); } xBasicStream->SetCryptMaskKey(OString()); diff --git a/dbaccess/source/ui/tabledesign/TableRow.cxx b/dbaccess/source/ui/tabledesign/TableRow.cxx index 9d1f91e4c3b2..20c868067a45 100644 --- a/dbaccess/source/ui/tabledesign/TableRow.cxx +++ b/dbaccess/source/ui/tabledesign/TableRow.cxx @@ -132,9 +132,9 @@ namespace dbaui return _rStr; OFieldDescription* pFieldDesc = new OFieldDescription(); _rRow.m_pActFieldDescr = pFieldDesc; - pFieldDesc->SetName(_rStr.ReadUniOrByteString(_rStr.GetStreamEncoding())); - pFieldDesc->SetDescription(_rStr.ReadUniOrByteString(_rStr.GetStreamEncoding())); - pFieldDesc->SetHelpText(_rStr.ReadUniOrByteString(_rStr.GetStreamEncoding())); + pFieldDesc->SetName(_rStr.ReadUniOrByteString()); + pFieldDesc->SetDescription(_rStr.ReadUniOrByteString()); + pFieldDesc->SetHelpText(_rStr.ReadUniOrByteString()); _rStr.ReadInt32( nValue ); Any aControlDefault; @@ -148,7 +148,7 @@ namespace dbaui break; } case 2: - aControlDefault <<= _rStr.ReadUniOrByteString(_rStr.GetStreamEncoding()); + aControlDefault <<= _rStr.ReadUniOrByteString(); break; } diff --git a/editeng/source/items/legacyitem.cxx b/editeng/source/items/legacyitem.cxx index 58442a0dc19d..23fe71101e57 100644 --- a/editeng/source/items/legacyitem.cxx +++ b/editeng/source/items/legacyitem.cxx @@ -140,7 +140,7 @@ namespace legacy if ( nDoLoad & LOAD_LINK ) { // UNICODE: rStrm >> aRel; - OUString aRel = rStrm.ReadUniOrByteString(rStrm.GetStreamEncoding()); + OUString aRel = rStrm.ReadUniOrByteString(); // TODO/MBA: how can we get a BaseURL here?! OSL_FAIL("No BaseURL!"); @@ -152,7 +152,7 @@ namespace legacy if ( nDoLoad & LOAD_FILTER ) { // UNICODE: rStrm >> maStrFilter; - rItem.SetGraphicFilter(rStrm.ReadUniOrByteString(rStrm.GetStreamEncoding())); + rItem.SetGraphicFilter(rStrm.ReadUniOrByteString()); } rStrm.ReadSChar( nPos ); diff --git a/editeng/source/items/numitem.cxx b/editeng/source/items/numitem.cxx index 89b46ccf771b..f9f6a64993a0 100644 --- a/editeng/source/items/numitem.cxx +++ b/editeng/source/items/numitem.cxx @@ -223,9 +223,9 @@ SvxNumberFormat::SvxNumberFormat( SvStream &rStream ) rStream.ReadInt16( nCharTextDistance ); - sPrefix = rStream.ReadUniOrByteString( rStream.GetStreamEncoding() ); - sSuffix = rStream.ReadUniOrByteString( rStream.GetStreamEncoding() ); - sCharStyleName = rStream.ReadUniOrByteString( rStream.GetStreamEncoding() ); + sPrefix = rStream.ReadUniOrByteString(); + sSuffix = rStream.ReadUniOrByteString(); + sCharStyleName = rStream.ReadUniOrByteString(); sal_uInt16 hasGraphicBrush = 0; rStream.ReadUInt16( hasGraphicBrush ); diff --git a/include/tools/stream.hxx b/include/tools/stream.hxx index 6f450aede485..dce4457d7303 100644 --- a/include/tools/stream.hxx +++ b/include/tools/stream.hxx @@ -345,6 +345,10 @@ public: eSrcEncoding==RTL_TEXTENCODING_UNICODE, otherwise read a 16bit length prefixed sequence of bytes and convert from eSrcEncoding */ OUString ReadUniOrByteString(rtl_TextEncoding eSrcEncoding); + /** Read a 32bit length prefixed sequence of utf-16 if + GetStreamEncoding()==RTL_TEXTENCODING_UNICODE, otherwise read a 16bit length + prefixed sequence of bytes and convert from GetStreamEncoding() */ + OUString ReadUniOrByteString(); /** Write a 32bit length prefixed sequence of utf-16 if eDestEncoding==RTL_TEXTENCODING_UNICODE, otherwise convert to eDestEncoding and write a 16bit length prefixed sequence of bytes */ diff --git a/sc/source/core/tool/ddelink.cxx b/sc/source/core/tool/ddelink.cxx index c398db35f9f7..3e71fa3f3b10 100644 --- a/sc/source/core/tool/ddelink.cxx +++ b/sc/source/core/tool/ddelink.cxx @@ -83,10 +83,9 @@ ScDdeLink::ScDdeLink( ScDocument& rD, SvStream& rStream, ScMultipleReadHeader& r { rHdr.StartEntry(); - rtl_TextEncoding eCharSet = rStream.GetStreamEncoding(); - aAppl = rStream.ReadUniOrByteString( eCharSet ); - aTopic = rStream.ReadUniOrByteString( eCharSet ); - aItem = rStream.ReadUniOrByteString( eCharSet ); + aAppl = rStream.ReadUniOrByteString(); + aTopic = rStream.ReadUniOrByteString(); + aItem = rStream.ReadUniOrByteString(); bool bHasValue; rStream.ReadCharAsBool( bHasValue ); diff --git a/svl/source/items/stringio.cxx b/svl/source/items/stringio.cxx index f408ec00ef63..03476a5c456f 100644 --- a/svl/source/items/stringio.cxx +++ b/svl/source/items/stringio.cxx @@ -21,10 +21,7 @@ #include <tools/stream.hxx> -OUString readByteString(SvStream& rStream) -{ - return rStream.ReadUniOrByteString(rStream.GetStreamEncoding()); -} +OUString readByteString(SvStream& rStream) { return rStream.ReadUniOrByteString(); } void writeByteString(SvStream& rStream, std::u16string_view rString) { diff --git a/svtools/source/misc/templatefoldercache.cxx b/svtools/source/misc/templatefoldercache.cxx index 97b01d45852e..200f5fe46ce9 100644 --- a/svtools/source/misc/templatefoldercache.cxx +++ b/svtools/source/misc/templatefoldercache.cxx @@ -356,7 +356,7 @@ namespace svt // initialize them with their (local) names while ( nChildren-- ) { - OUString sURL = m_rStorage.ReadUniOrByteString(m_rStorage.GetStreamEncoding()); + OUString sURL = m_rStorage.ReadUniOrByteString(); sURL = m_xOfficeInstDirs->makeAbsoluteURL( sURL ); rChildren.push_back( new TemplateContent( INetURLObject( sURL ) ) ); } @@ -671,7 +671,7 @@ namespace svt m_aPreviousState.reserve( nRootDirectories ); while ( nRootDirectories-- ) { - OUString sURL = m_pCacheStream->ReadUniOrByteString(m_pCacheStream->GetStreamEncoding()); + OUString sURL = m_pCacheStream->ReadUniOrByteString(); // #116281# Keep office installation relocatable. Never store // any direct references to office installation directory. sURL = getOfficeInstDirs()->makeAbsoluteURL( sURL ); diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx index 8a52e03dafb2..9926979b0b17 100644 --- a/tools/source/stream/stream.cxx +++ b/tools/source/stream/stream.cxx @@ -1136,6 +1136,11 @@ sal_uInt64 SvStream::WriteStream( SvStream& rStream, sal_uInt64 nSize ) return nSize - nWriteSize; } +OUString SvStream::ReadUniOrByteString() +{ + return ReadUniOrByteString(GetStreamEncoding()); +} + OUString SvStream::ReadUniOrByteString(rtl_TextEncoding eSrcEncoding) { // read UTF-16 string directly from stream ? diff --git a/vcl/source/font/font.cxx b/vcl/source/font/font.cxx index 5801873a8319..22016e7f0b84 100644 --- a/vcl/source/font/font.cxx +++ b/vcl/source/font/font.cxx @@ -474,8 +474,8 @@ SvStream& ReadImplFont( SvStream& rIStm, ImplFont& rImplFont, tools::Long& rnNor bool bTmp(false); sal_uInt8 nTmp8(0); - rImplFont.SetFamilyName( rIStm.ReadUniOrByteString(rIStm.GetStreamEncoding()) ); - rImplFont.maStyleName = rIStm.ReadUniOrByteString(rIStm.GetStreamEncoding()); + rImplFont.SetFamilyName( rIStm.ReadUniOrByteString() ); + rImplFont.maStyleName = rIStm.ReadUniOrByteString(); TypeSerializer aSerializer(rIStm); aSerializer.readSize(rImplFont.maAverageFontSize); diff --git a/vcl/source/treelist/transfer.cxx b/vcl/source/treelist/transfer.cxx index 0f6c3b341843..5b5e765eb188 100644 --- a/vcl/source/treelist/transfer.cxx +++ b/vcl/source/treelist/transfer.cxx @@ -133,8 +133,8 @@ static void TryReadTransferableObjectDescriptor(SvStream& rIStm, sal_Int32 dragStartPosX, dragStartPosY; rIStm.ReadInt32(dragStartPosX).ReadInt32(dragStartPosY); - const OUString typeName = rIStm.ReadUniOrByteString(osl_getThreadTextEncoding()); - const OUString displayName = rIStm.ReadUniOrByteString(osl_getThreadTextEncoding()); + const OUString typeName = rIStm.ReadUniOrByteString(); + const OUString displayName = rIStm.ReadUniOrByteString(); sal_uInt32 nSig1, nSig2; rIStm.ReadUInt32(nSig1).ReadUInt32(nSig2); commit 5ad9d928c75a66edfc901cfb7a41608237ad9c6b Author: Noel Grandin <[email protected]> AuthorDate: Wed Feb 25 14:25:49 2026 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Fri Feb 27 07:48:36 2026 +0100 SvStream::WriteUniOrByteChar should not need to specify encoding Instead, rely on the stream being set into the correct encoding during stream initialisation. Change-Id: Ie019e9f7a668b943e418126b14b8bf852a4fa966 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200459 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/include/tools/stream.hxx b/include/tools/stream.hxx index 6729412bc267..6f450aede485 100644 --- a/include/tools/stream.hxx +++ b/include/tools/stream.hxx @@ -374,14 +374,12 @@ public: bool WriteUnicodeOrByteText(std::u16string_view rStr) { return WriteUnicodeOrByteText(rStr, GetStreamEncoding(), /*bZero*/false); } - /** Write a Unicode character if eDestEncoding==RTL_TEXTENCODING_UNICODE, - otherwise write as Bytecode converted to eDestEncoding. + /** Write a Unicode character if GetStreamEncoding()==RTL_TEXTENCODING_UNICODE, + otherwise write as Bytecode converted to GetStreamEncoding(). This may result in more than one byte being written if a multi byte encoding (e.g. UTF7, UTF8) is chosen. */ - bool WriteUniOrByteChar( sal_Unicode ch, rtl_TextEncoding eDestEncoding ); - bool WriteUniOrByteChar( sal_Unicode ch ) - { return WriteUniOrByteChar( ch, GetStreamEncoding() ); } + bool WriteUniOrByteChar( sal_Unicode ch ); void SetBufferSize( sal_uInt16 m_nBufSize ); sal_uInt16 GetBufferSize() const { return m_nBufSize; } diff --git a/sc/source/filter/dif/difexp.cxx b/sc/source/filter/dif/difexp.cxx index 133372e39660..bb03b8b9532b 100644 --- a/sc/source/filter/dif/difexp.cxx +++ b/sc/source/filter/dif/difexp.cxx @@ -210,9 +210,9 @@ void ScFormatFilterPluginImpl::ScExportDif( SvStream& rOut, ScDocument& rDoc, OUString strFrom(cStrDelim); OUString strTo = strFrom + strFrom; aTmpStr = aTmpStr.replaceAll(strFrom, strTo); - rOut.WriteUniOrByteChar( cStrDelim, eCharSet ); + rOut.WriteUniOrByteChar( cStrDelim ); rOut.WriteUnicodeOrByteText(aTmpStr, eCharSet); - rOut.WriteUniOrByteChar( cStrDelim, eCharSet ); + rOut.WriteUniOrByteChar( cStrDelim ); } else if ( bContextOrNotAsciiEncoding ) { @@ -224,9 +224,9 @@ void ScFormatFilterPluginImpl::ScExportDif( SvStream& rOut, ScDocument& rDoc, OUString aStrTo = aStrDelimDecoded + aStrDelimDecoded; aStrDec = aStrDec.replaceAll(aStrDelimDecoded, aStrTo); // write byte re-encoded - rOut.WriteUniOrByteChar( cStrDelim, eCharSet ); + rOut.WriteUniOrByteChar( cStrDelim ); rOut.WriteUnicodeOrByteText( aStrDec, eCharSet ); - rOut.WriteUniOrByteChar( cStrDelim, eCharSet ); + rOut.WriteUniOrByteChar( cStrDelim ); } else { @@ -239,7 +239,7 @@ void ScFormatFilterPluginImpl::ScExportDif( SvStream& rOut, ScDocument& rDoc, rOut.WriteBytes(aStrEnc.getStr(), aStrEnc.getLength()); rOut.WriteBytes(aStrDelimEncoded.getStr(), aStrDelimEncoded.getLength()); } - rOut.WriteUniOrByteChar( ' ', eCharSet ); + rOut.WriteUniOrByteChar( ' ' ); } } aPrgrsBar.SetState( nRowCnt ); diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx index b72ef6a16219..dced37e186ad 100644 --- a/sc/source/ui/docshell/docsh.cxx +++ b/sc/source/ui/docshell/docsh.cxx @@ -2099,10 +2099,10 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt, // import. aString = "sep=" + OUStringChar(cDelim); if (cStrDelim != 0) - rStream.WriteUniOrByteChar( '"', eCharSet); + rStream.WriteUniOrByteChar( '"'); rStream.WriteUnicodeOrByteText(aString, eCharSet); if (cStrDelim != 0) - rStream.WriteUniOrByteChar( '"', eCharSet); + rStream.WriteUniOrByteChar( '"'); endlub( rStream ); ++nStartRow; } @@ -2316,10 +2316,10 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt, } if ( bNeedQuotes || bForceQuotes ) - rStream.WriteUniOrByteChar( cStrDelim, eCharSet ); + rStream.WriteUniOrByteChar( cStrDelim ); rStream.WriteUnicodeOrByteText(aUniString, eCharSet); if ( bNeedQuotes || bForceQuotes ) - rStream.WriteUniOrByteChar( cStrDelim, eCharSet ); + rStream.WriteUniOrByteChar( cStrDelim ); } else { @@ -2355,10 +2355,10 @@ void ScDocShell::AsciiSave( SvStream& rStream, const ScImportOptions& rAsciiOpt, // write byte re-encoded if ( bNeedQuotes || bForceQuotes ) - rStream.WriteUniOrByteChar( cStrDelim, eCharSet ); + rStream.WriteUniOrByteChar( cStrDelim ); rStream.WriteUnicodeOrByteText( aStrDec, eCharSet ); if ( bNeedQuotes || bForceQuotes ) - rStream.WriteUniOrByteChar( cStrDelim, eCharSet ); + rStream.WriteUniOrByteChar( cStrDelim ); } else { diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx index 617a02684b40..8a52e03dafb2 100644 --- a/tools/source/stream/stream.cxx +++ b/tools/source/stream/stream.cxx @@ -672,8 +672,9 @@ bool SvStream::WriteLine(std::string_view rStr) return m_nError == ERRCODE_NONE; } -bool SvStream::WriteUniOrByteChar(sal_Unicode ch, rtl_TextEncoding eDestEncoding) +bool SvStream::WriteUniOrByteChar(sal_Unicode ch) { + auto eDestEncoding = GetStreamEncoding(); if (eDestEncoding == RTL_TEXTENCODING_UNICODE) WriteUnicode(ch); else
