From ebccbf720caff6ad91570fe156d579428f8300f0 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 9 Feb 2007 12:28:22 +0000 Subject: [PATCH] * fix concat_multi for widestrings, patch was already done for ansistrings fixes 8292 git-svn-id: trunk@6384 - --- rtl/inc/wstrings.inc | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/rtl/inc/wstrings.inc b/rtl/inc/wstrings.inc index 78071db749..b1b02c2268 100644 --- a/rtl/inc/wstrings.inc +++ b/rtl/inc/wstrings.inc @@ -501,6 +501,7 @@ Var p,pc : pointer; Size,NewLen, OldDestLen : SizeInt; + destcopy : widestring; begin if high(sarr)=0 then begin @@ -509,17 +510,19 @@ begin end; lowstart:=low(sarr); if Pointer(DestS)=Pointer(sarr[lowstart]) then + inc(lowstart); + { Check for another reuse, then we can't use + the append optimization } + for i:=lowstart to high(sarr) do begin - inc(lowstart); - { Check for another reuse, then we can't use - the append optimization } - for i:=lowstart to high(sarr) do + if Pointer(DestS)=Pointer(sarr[i]) then begin - if Pointer(DestS)=Pointer(sarr[i]) then - begin - lowstart:=low(sarr); - break; - end; + { if DestS is used somewhere in the middle of the expression, + we need to make sure the original string still exists after + we empty/modify DestS } + destcopy:=dests; + lowstart:=low(sarr); + break; end; end; { Start with empty DestS if we start with concatting