diff --git a/rtl/inc/astrings.pp b/rtl/inc/astrings.pp index 603ee340c8..424f6cda10 100644 --- a/rtl/inc/astrings.pp +++ b/rtl/inc/astrings.pp @@ -204,27 +204,32 @@ begin S1:=Temp; end; -Procedure Ansi_String_Concat (Var S1 : Pointer; Var S2 : Pointer); +function Ansi_String_Concat (S1 : Pointer;S2 : Pointer) : pointer; + [Public, alias: 'FPC_ANSICAT']; { Concatenates 2 AnsiStrings : S1+S2. - Result Goes to S1; + Result Goes to S3; } -Var Size,Location : Longint; + Var + Size,Location : Longint; + S3 : pointer; begin if S2=Nil then exit; if (S1=Nil) then - AssignAnsiString(S1,S2) + AssignAnsiString(S3,S2) else begin - Size:=PAnsiRec(Pointer(S2)-FirstOff)^.Len; - Location:=Length(AnsiString(S1)); - { Setlength takes case of uniqueness - and allocated memory. We need to use length, - to take into account possibility of S1=Nil } -//!! SetLength (S1,Size+Location); - Move (Pointer(S2)^,Pointer(Pointer(S1)+location)^,Size+1); + Size:=PAnsiRec(S2-FirstOff)^.Len; + Location:=Length(AnsiString(S1)); + { Setlength takes case of uniqueness + and allocated memory. We need to use length, + to take into account possibility of S1=Nil } + SetLength (S3,Size+Location); + Move (S1^,S3^,PAnsiRec(S1-FirstOff)^.Len); + Move (S2^,(S3+location)^,Size+1); end; + Ansi_String_Concat:=S3; end; @@ -708,7 +713,10 @@ end; { $Log$ - Revision 1.19 1998-10-20 12:46:11 florian + Revision 1.20 1998-10-21 08:38:46 florian + * ansistringconcat fixed + + Revision 1.19 1998/10/20 12:46:11 florian * small fixes to ansicompare Revision 1.18 1998/09/28 14:02:34 michael