idl/source/prj/database.cxx | 51 ++++++++++++++++++++--- solenv/gbuild/ComponentTarget.mk | 1 sw/inc/doc.hxx | 1 sw/source/core/crsr/swcrsr.cxx | 22 +++++++++ sw/source/core/doc/doc.cxx | 11 ++++ sw/source/core/doc/docedt.cxx | 8 +++ sw/source/core/inc/sectfrm.hxx | 2 sw/source/core/layout/newfrm.cxx | 9 +++- sw/source/core/layout/sectfrm.cxx | 22 ++++----- sw/source/core/undo/unins.cxx | 12 +++-- sw/source/ui/uiview/viewsrch.cxx | 17 ++++++- sw/source/ui/wrtsh/wrtundo.cxx | 3 - testtools/source/bridgetest/makefile.mk | 9 ++++ xmlsecurity/source/xmlsec/nss/nssinitializer.cxx | 2 14 files changed, 138 insertions(+), 32 deletions(-)
New commits: commit 986ac894f4288fcbde35771793f332c5981abc27 Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 18:55:47 2011 +0100 SwSectionFrm: s/sal_Bool/bool/ diff --git a/sw/source/core/inc/sectfrm.hxx b/sw/source/core/inc/sectfrm.hxx index 7966b8e..bc16e52 100644 --- a/sw/source/core/inc/sectfrm.hxx +++ b/sw/source/core/inc/sectfrm.hxx @@ -60,7 +60,7 @@ class SwSectionFrm: public SwLayoutFrm, public SwFlowFrm void CalcFtnAtEndFlag(); void CalcEndAtEndFlag(); const SwSectionFmt* _GetEndSectFmt() const; - sal_Bool IsEndnoteAtMyEnd() const; + bool IsEndnoteAtMyEnd() const; protected: virtual void MakeAll(); virtual sal_Bool ShouldBwdMoved( SwLayoutFrm *pNewUpper, sal_Bool bHead, sal_Bool &rReformat ); diff --git a/sw/source/core/layout/sectfrm.cxx b/sw/source/core/layout/sectfrm.cxx index 5091d5f..6f568f4 100644 --- a/sw/source/core/layout/sectfrm.cxx +++ b/sw/source/core/layout/sectfrm.cxx @@ -2369,7 +2369,7 @@ void SwSectionFrm::CalcFtnAtEndFlag() } } -sal_Bool SwSectionFrm::IsEndnoteAtMyEnd() const +bool SwSectionFrm::IsEndnoteAtMyEnd() const { return pSection->GetFmt()->GetEndAtTxtEnd( sal_False ).IsAtEnd(); } @@ -2469,13 +2469,13 @@ void SwSectionFrm::_UpdateAttr( const SfxPoolItem *pOld, const SfxPoolItem *pNew } while ( pTmp ); aCol.Init( nCol, 0, 1000 ); } - sal_Bool bChgFtn = IsFtnAtEnd(); - sal_Bool bChgEndn = IsEndnAtEnd(); - sal_Bool bChgMyEndn = IsEndnoteAtMyEnd(); + bool bChgFtn = IsFtnAtEnd(); + bool const bChgEndn = IsEndnAtEnd(); + bool const bChgMyEndn = IsEndnoteAtMyEnd(); CalcFtnAtEndFlag(); CalcEndAtEndFlag(); - bChgFtn = ( bChgFtn != (sal_Bool) IsFtnAtEnd() ) || - ( bChgEndn != (sal_Bool) IsEndnAtEnd() ) || + bChgFtn = ( bChgFtn != IsFtnAtEnd() ) || + ( bChgEndn != IsEndnAtEnd() ) || ( bChgMyEndn != IsEndnoteAtMyEnd() ); ChgColumns( aCol, rNewCol, bChgFtn ); rInvFlags |= 0x10; @@ -2496,9 +2496,9 @@ void SwSectionFrm::_UpdateAttr( const SfxPoolItem *pOld, const SfxPoolItem *pNew case RES_FTN_AT_TXTEND: if( !IsInFtn() ) { - sal_Bool bOld = IsFtnAtEnd(); + bool const bOld = IsFtnAtEnd(); CalcFtnAtEndFlag(); - if( bOld != (sal_Bool) IsFtnAtEnd() ) + if (bOld != IsFtnAtEnd()) { const SwFmtCol& rNewCol = GetFmt()->GetCol(); ChgColumns( rNewCol, rNewCol, sal_True ); @@ -2510,10 +2510,10 @@ void SwSectionFrm::_UpdateAttr( const SfxPoolItem *pOld, const SfxPoolItem *pNew case RES_END_AT_TXTEND: if( !IsInFtn() ) { - sal_Bool bOld = IsEndnAtEnd(); - sal_Bool bMyOld = IsEndnoteAtMyEnd(); + bool const bOld = IsEndnAtEnd(); + bool const bMyOld = IsEndnoteAtMyEnd(); CalcEndAtEndFlag(); - if( bOld != (sal_Bool) IsEndnAtEnd() || bMyOld != IsEndnoteAtMyEnd()) + if (bOld != IsEndnAtEnd() || bMyOld != IsEndnoteAtMyEnd()) { const SwFmtCol& rNewCol = GetFmt()->GetCol(); ChgColumns( rNewCol, rNewCol, sal_True ); commit eedfbf5b8b99049753f444ea71e0944a69dbc60c Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 17:14:04 2011 +0100 fdo#42865: let's try map file for windows only diff --git a/testtools/source/bridgetest/makefile.mk b/testtools/source/bridgetest/makefile.mk index 8d2f21b..1423190 100644 --- a/testtools/source/bridgetest/makefile.mk +++ b/testtools/source/bridgetest/makefile.mk @@ -83,7 +83,11 @@ SHL1STDLIBS= \ SHL1LIBS= $(LIB1TARGET) SHL1DEF= $(MISC)$/$(SHL1TARGET).def DEF1NAME= $(SHL1TARGET) +.IF "$(GUI)"=="WNT" SHL1VERSIONMAP = $(SOLARENV)/src/component.map +.ELSE # just a quick hack for GCC fdo#42865 +SHL1USE_EXPORTS = name +.ENDIF # ---- test object ---- @@ -102,7 +106,12 @@ SHL2STDLIBS= \ SHL2LIBS= $(LIB2TARGET) SHL2DEF= $(MISC)$/$(SHL2TARGET).def DEF2NAME= $(SHL2TARGET) +.IF "$(GUI)"=="WNT" SHL2VERSIONMAP = $(SOLARENV)/src/component.map +.ELSE # just a quick hack for GCC fdo#42865 +SHL2USE_EXPORTS = name +.ENDIF + SHL3TARGET = $(ENFORCEDSHLPREFIX)constructors.uno SHL3OBJS = $(SLO)$/constructors.obj commit 6c1ac01a4ac425456cb14e4ba34a3a2d9286453b Author: Caolán McNamara <caol...@redhat.com> Date: Fri Nov 18 16:50:03 2011 +0100 fdo#42534: SwRootFrm: clear SwLayouter in dtor This crash is probably a regression introduced by CWS swlayoutrefactoring. diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index 8427b17..52991c1 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -949,6 +949,7 @@ public: virtual const SwRootFrm *GetCurrentLayout() const; virtual SwRootFrm *GetCurrentLayout();//swmod 080219 virtual bool HasLayout() const; + void ClearSwLayouterEntries(); /** IDocumentTimerAccess */ diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 326cfde..d4929bb 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -1815,13 +1815,22 @@ bool SwDoc::IsModified() const return mbModified; } -void SwDoc::SetModified() +//Load document from fdo#42534 under valgrind, drag the scrollbar down so full +//document layout is triggered. Close document before layout has completed, and +//SwAnchoredObject objects deleted by the deletion of layout remain referenced +//by the SwLayouter +void SwDoc::ClearSwLayouterEntries() { SwLayouter::ClearMovedFwdFrms( *this ); SwLayouter::ClearObjsTmpConsiderWrapInfluence( *this ); SwLayouter::ClearFrmsNotToWrap( *this ); // #i65250# SwLayouter::ClearMoveBwdLayoutInfo( *this ); +} + +void SwDoc::SetModified() +{ + ClearSwLayouterEntries(); // We return the status for the link according to the old and new value of the flags // Bit 0: -> old state // Bit 1: -> new state diff --git a/sw/source/core/layout/newfrm.cxx b/sw/source/core/layout/newfrm.cxx index 4504e6e..9c7c5af 100644 --- a/sw/source/core/layout/newfrm.cxx +++ b/sw/source/core/layout/newfrm.cxx @@ -616,8 +616,13 @@ SwRootFrm::~SwRootFrm() if(pBlink) pBlink->FrmDelete( this ); - if ( static_cast<SwFrmFmt*>(GetRegisteredInNonConst()) ) - static_cast<SwFrmFmt*>(GetRegisteredInNonConst())->GetDoc()->DelFrmFmt( static_cast<SwFrmFmt*>(GetRegisteredInNonConst()) ); + SwFrmFmt *pRegisteredInNonConst = static_cast<SwFrmFmt*>(GetRegisteredInNonConst()); + if ( pRegisteredInNonConst ) + { + SwDoc *pDoc = pRegisteredInNonConst->GetDoc(); + pDoc->DelFrmFmt( pRegisteredInNonConst ); + pDoc->ClearSwLayouterEntries(); + } delete pDestroy; pDestroy = 0; commit 9de2110e5bed17fcc6050bfaa669df45f0c1eb44 Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 14:54:48 2011 +0100 SwCursor::RestoreSavePos: assert on invalid position diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx index 7340ccc..a633bc0 100644 --- a/sw/source/core/crsr/swcrsr.cxx +++ b/sw/source/core/crsr/swcrsr.cxx @@ -2093,21 +2093,27 @@ sal_Bool SwCursor::MoveSection( SwWhichSection fnWhichSect, void SwCursor::RestoreSavePos() { - // fdo#40831 if you delete the row or column containing pSavePos, - // Writer will crash. Work around this. + // This method is not supposed to be used in cases when nodes may be + // deleted; detect such cases, but do not crash (example: fdo#40831). sal_uLong uNodeCount = GetPoint()->nNode.GetNodes().Count(); + OSL_ENSURE(!pSavePos || pSavePos->nNode < uNodeCount, + "SwCursor::RestoreSavePos: invalid node: " + "probably something was deleted; consider using SwUnoCrsr instead"); if( pSavePos && pSavePos->nNode < uNodeCount ) { GetPoint()->nNode = pSavePos->nNode; xub_StrLen nIdx = 0; if ( GetCntntNode() ) + { if ( pSavePos->nCntnt <= GetCntntNode()->Len() ) nIdx = pSavePos->nCntnt; else + { nIdx = GetCntntNode()->Len(); - else - nIdx = GetPoint()->nContent.GetIndex(); // Probably, nIdx = 0 + OSL_FAIL("SwCursor::RestoreSavePos: invalid content index"); + } + } GetPoint()->nContent.Assign( GetCntntNode(), nIdx ); } } commit af0333e5865ecd184270af3211880d6d02307c31 Author: Tomofumi Yagi <ya...@mknada.sakura.ne.jp> Date: Fri Nov 18 14:38:19 2011 +0100 fdo#40831: SwCursor::RestoreSavePos: Check that position is valid, so the cursor does not point to a non-existent node. diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx index a6fea0d..7340ccc 100644 --- a/sw/source/core/crsr/swcrsr.cxx +++ b/sw/source/core/crsr/swcrsr.cxx @@ -2093,10 +2093,22 @@ sal_Bool SwCursor::MoveSection( SwWhichSection fnWhichSect, void SwCursor::RestoreSavePos() { - if( pSavePos ) + // fdo#40831 if you delete the row or column containing pSavePos, + // Writer will crash. Work around this. + sal_uLong uNodeCount = GetPoint()->nNode.GetNodes().Count(); + if( pSavePos && pSavePos->nNode < uNodeCount ) { GetPoint()->nNode = pSavePos->nNode; - GetPoint()->nContent.Assign( GetCntntNode(), pSavePos->nCntnt ); + + xub_StrLen nIdx = 0; + if ( GetCntntNode() ) + if ( pSavePos->nCntnt <= GetCntntNode()->Len() ) + nIdx = pSavePos->nCntnt; + else + nIdx = GetCntntNode()->Len(); + else + nIdx = GetPoint()->nContent.GetIndex(); // Probably, nIdx = 0 + GetPoint()->nContent.Assign( GetCntntNode(), nIdx ); } } commit 82a716f29cc252740c80556f72f9d9e602877918 Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 14:12:42 2011 +0100 fdo#40831: SwView::ExecSearch: Replace may delete nodes, so the current cursor position must be stored in a way so that it is corrected when nodes are removed. diff --git a/sw/source/ui/uiview/viewsrch.cxx b/sw/source/ui/uiview/viewsrch.cxx index 3a568c1..501e965 100644 --- a/sw/source/ui/uiview/viewsrch.cxx +++ b/sw/source/ui/uiview/viewsrch.cxx @@ -30,6 +30,9 @@ #include "precompiled_sw.hxx" #include <string> + +#include <boost/scoped_ptr.hpp> + #include <hintids.hxx> #include <com/sun/star/util/SearchOptions.hpp> #include <svl/cjkoptions.hxx> @@ -57,6 +60,8 @@ #include <uitool.hxx> #include <cmdid.h> #include <docsh.hxx> +#include <doc.hxx> +#include <unocrsr.hxx> #include <view.hrc> #include <SwRewriter.hxx> @@ -283,7 +288,14 @@ void SwView::ExecSearch(SfxRequest& rReq, sal_Bool bNoMessage) case SVX_SEARCHCMD_REPLACE_ALL: { SwSearchOptions aOpts( pWrtShell, pSrchItem->GetBackward() ); - SwCrsrSaveState aSaveCursor( *pWrtShell->GetSwCrsr()); + + // Fix for i#8288: "Replace all" should leave the cursor at the place it was + // before executing the command, rather than at the site of the final replacement. + // To do this take note of the current cursor position before replace all begins: + // note: must be stored so that it is corrected by PamCorr* + ::boost::scoped_ptr<SwUnoCrsr> const pTmpCursor( + pWrtShell->GetDoc()->CreateUnoCrsr( + *pWrtShell->GetSwCrsr()->GetPoint())); if( !pSrchItem->GetSelection() ) { @@ -304,7 +316,8 @@ void SwView::ExecSearch(SfxRequest& rReq, sal_Bool bNoMessage) pWrtShell->StartAllAction(); nFound = FUNC_Search( aOpts ); // #i8288# Now that everything has been replaced, restore the original cursor position. - pWrtShell->GetSwCrsr()->RestoreSavePos(); // (position saved by SwCrsrSaveState above) + *(pWrtShell->GetSwCrsr()->GetPoint()) = + *pTmpCursor->GetPoint(); pWrtShell->EndAllAction(); } commit e0d4e6f22a4290a4b11a342fd59523b28963838c Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 14:07:11 2011 +0100 i#102333: SwDoc::ReplaceRangeImpl: The fix for this (230fcf4a456636bb466f72834cd57238621d206d) was not quite right; there are 2 different join modes, and moving the cursor backward is required in one of them, but not the other. This can be seen when doing replace all ^$ with several consecutive empty lines. diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx index 22292b4..d6736f5 100644 --- a/sw/source/core/doc/docedt.cxx +++ b/sw/source/core/doc/docedt.cxx @@ -2481,6 +2481,11 @@ SetRedlineMode( eOld ); rPam.GetMark()->nContent.Assign( aPtNd.GetNode().GetCntntNode(), nPtCnt ); + if (bJoinTxt && !bJoinPrev) + { + rPam.Move(fnMoveBackward); + } + if( pUndoRpl ) { pUndoRpl->SetEnd(rPam); commit 74f53711fa7e54c4d449912be53c50eebb002451 Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 14:01:46 2011 +0100 SwDoc::ReplaceRange: prevent assertion diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx index b4c8e07..22292b4 100644 --- a/sw/source/core/doc/docedt.cxx +++ b/sw/source/core/doc/docedt.cxx @@ -2219,6 +2219,9 @@ bool SwDoc::ReplaceRange( SwPaM& rPam, const String& rStr, if (!Breaks.size()) { + // park aPam somewhere so it does not point to node that is deleted + aPam.DeleteMark(); + *aPam.GetPoint() = SwPosition(GetNodes().GetEndOfContent()); return ReplaceRangeImpl(rPam, rStr, bRegExReplace); // original pam! } commit 72318173b6d2f6f62e15909dcc121e85872c0ef1 Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 13:59:49 2011 +0100 SwUndoReplace::Impl::UndoImpl: prevent assertion: unregister SwIndex local variable from node to be deleted diff --git a/sw/source/core/undo/unins.cxx b/sw/source/core/undo/unins.cxx index d845c48..b4d6063 100644 --- a/sw/source/core/undo/unins.cxx +++ b/sw/source/core/undo/unins.cxx @@ -606,7 +606,7 @@ SwUndoReplace::Impl::Impl( m_bSplitNext = m_nSttNd != pEnd->nNode.GetIndex(); SwTxtNode* pNd = pStt->nNode.GetNode().GetTxtNode(); - OSL_ENSURE( pNd, "wo ist der TextNode" ); + OSL_ENSURE( pNd, "Dude, where's my TextNode?" ); pHistory = new SwHistory; DelCntntIndex( *rPam.GetMark(), *rPam.GetPoint() ); @@ -655,7 +655,7 @@ void SwUndoReplace::Impl::UndoImpl(::sw::UndoRedoContext & rContext) rPam.DeleteMark(); SwTxtNode* pNd = pDoc->GetNodes()[ m_nSttNd - m_nOffset ]->GetTxtNode(); - OSL_ENSURE( pNd, "Wo ist der TextNode geblieben?" ); + OSL_ENSURE( pNd, "Dude, where's my TextNode?" ); SwAutoCorrExceptWord* pACEWord = pDoc->GetAutoCorrExceptWord(); if( pACEWord ) @@ -668,7 +668,7 @@ void SwUndoReplace::Impl::UndoImpl(::sw::UndoRedoContext & rContext) pDoc->SetAutoCorrExceptWord( 0 ); } - SwIndex aIdx( pNd, sal_uInt16( m_nSttCnt ) ); + SwIndex aIdx( pNd, m_nSttCnt ); if( m_nSttNd == m_nEndNd ) { pNd->EraseText( aIdx, sal_uInt16( m_sIns.getLength() ) ); @@ -680,11 +680,13 @@ void SwUndoReplace::Impl::UndoImpl(::sw::UndoRedoContext & rContext) rPam.SetMark(); rPam.GetPoint()->nNode = m_nEndNd - m_nOffset; rPam.GetPoint()->nContent.Assign( rPam.GetCntntNode(), m_nEndCnt ); + // move it out of the way so it is not registered at deleted node + aIdx.Assign(0, 0); pDoc->DeleteAndJoin( rPam ); rPam.DeleteMark(); pNd = rPam.GetNode()->GetTxtNode(); - OSL_ENSURE( pNd, "Wo ist der TextNode geblieben?" ); + OSL_ENSURE( pNd, "Dude, where's my TextNode?" ); aIdx.Assign( pNd, m_nSttCnt ); } @@ -741,7 +743,7 @@ void SwUndoReplace::Impl::RedoImpl(::sw::UndoRedoContext & rContext) rPam.GetPoint()->nNode = m_nSttNd; SwTxtNode* pNd = rPam.GetPoint()->nNode.GetNode().GetTxtNode(); - OSL_ENSURE( pNd, "Wo ist der TextNode geblieben?" ); + OSL_ENSURE( pNd, "Dude, where's my TextNode?" ); rPam.GetPoint()->nContent.Assign( pNd, m_nSttCnt ); rPam.SetMark(); if( m_bSplitNext ) commit 0fbd0bbfecda7b0a4642c2cbe8ea80027265192d Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 13:57:02 2011 +0100 SwWrtShell::GetDoStrings: bogus assertion diff --git a/sw/source/ui/wrtsh/wrtundo.cxx b/sw/source/ui/wrtsh/wrtundo.cxx index 5ec7103..ff6aea3 100644 --- a/sw/source/ui/wrtsh/wrtundo.cxx +++ b/sw/source/ui/wrtsh/wrtundo.cxx @@ -56,7 +56,7 @@ void SwWrtShell::Do( DoType eDoType, sal_uInt16 nCnt ) sal_Bool bSaveDoesUndo = DoesUndo(); StartAllAction(); - switch( eDoType ) + switch (eDoType) { case UNDO: DoUndo(sal_False); // #i21739# @@ -156,7 +156,6 @@ sal_uInt16 SwWrtShell::GetDoStrings( DoType eDoType, SfxStringListItem& rStrs ) OSL_ENSURE(comments[i].getLength(), "no Undo/Redo Text set"); buf.append(comments[i]); buf.append(sal_Unicode('\n')); - OSL_ENSURE( !this, "no Undo/Redo Test set" ); } rStrs.SetString(buf.makeStringAndClear()); return static_cast<sal_uInt16>(comments.size()); commit 0d09e4025ee8d8590211636ee08984ecc3821709 Author: Michael Stahl <mst...@redhat.com> Date: Fri Nov 18 13:55:28 2011 +0100 ComponentTarget: do not generate broken component files diff --git a/solenv/gbuild/ComponentTarget.mk b/solenv/gbuild/ComponentTarget.mk index f840726..031d118 100644 --- a/solenv/gbuild/ComponentTarget.mk +++ b/solenv/gbuild/ComponentTarget.mk @@ -31,6 +31,7 @@ gb_ComponentTarget_get_source = $(1)/$(2).component define gb_ComponentTarget__command $(call gb_Output_announce,$(3),$(true),CMP,1) +$(if $(LIBFILENAME),,$(call gb_Output_error,No LIBFILENAME set at component target: $(1))) $(call gb_Helper_abbreviate_dirs_native,\ mkdir -p $(dir $(1)) && \ $(gb_XSLTPROC) --nonet --stringparam uri \ commit fa0512fe721678eaa83c21c2f1f53d36c6e91420 Author: Michael Stahl <mst...@redhat.com> Date: Thu Nov 17 11:39:01 2011 +0100 xmlsecurity: fix typo diff --git a/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx b/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx index eaa5e32..f2f8bc0 100644 --- a/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx +++ b/xmlsecurity/source/xmlsec/nss/nssinitializer.cxx @@ -376,7 +376,7 @@ extern "C" void nsscrypto_finalize() } else { - xmlsec_trace("Failed unloadeding module \""ROOT_CERTS"\"."); + xmlsec_trace("Failed unloading module \""ROOT_CERTS"\"."); } SECMOD_DestroyModule(RootsModule); } commit a042c2a6ab29011800de55fa382740be56c2d928 Author: Michael Stahl <mst...@redhat.com> Date: Wed Nov 16 22:51:48 2011 +0100 svidl: write dependencies with cygwin paths diff --git a/idl/source/prj/database.cxx b/idl/source/prj/database.cxx index 674aeac..c0bf3c2 100644 --- a/idl/source/prj/database.cxx +++ b/idl/source/prj/database.cxx @@ -837,6 +837,49 @@ void SvIdlDataBase::AddDepFile(String const& rFileName) m_DepFiles.insert(rFileName); } +#ifdef WNT +static ::rtl::OString +lcl_ConvertToCygwin(::rtl::OString const& rString) +{ + sal_Int32 i = 0; + sal_Int32 const len = rString.getLength(); + ::rtl::OStringBuffer buf(len + 16); + if ((2 <= len) && (':' == rString[1])) + { + buf.append("/cygdrive/"); + buf.append(static_cast<sal_Char>(tolower(rString[0]))); + i = 2; + } + for (; i < len; ++i) + { + sal_Char const c(rString[i]); + switch (c) + { + case '\\': + buf.append('/'); + break; + case ' ': + buf.append("\\ "); + break; + default: + buf.append(c); + break; + } + } + return buf.makeStringAndClear(); +} +#endif + +static ::rtl::OString +lcl_Convert(::rtl::OUString const& rString) +{ + return +#ifdef WNT + lcl_ConvertToCygwin +#endif + (::rtl::OUStringToOString(rString, RTL_TEXTENCODING_UTF8)); +} + struct WriteDep { SvFileStream & m_rStream; @@ -844,17 +887,15 @@ struct WriteDep void operator() (::rtl::OUString const& rItem) { m_rStream << " \\\n "; - m_rStream << - ::rtl::OUStringToOString(rItem, RTL_TEXTENCODING_UTF8).getStr(); + m_rStream << lcl_Convert(rItem).getStr(); } }; bool SvIdlDataBase::WriteDepFile( SvFileStream & rStream, ::rtl::OUString const& rTarget) { - rStream << - ::rtl::OUStringToOString(rTarget, RTL_TEXTENCODING_UTF8).getStr(); - rStream << " : "; + rStream << lcl_Convert(rTarget).getStr(); + rStream << " :"; ::std::for_each(m_DepFiles.begin(), m_DepFiles.end(), WriteDep(rStream)); return rStream.GetError() == SVSTREAM_OK; }
_______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits