Răsfoiți Sursa

* ansistringconcat fixed

florian 27 ani în urmă
părinte
comite
b70ee498ad
1 a modificat fișierele cu 20 adăugiri și 12 ștergeri
  1. 20 12
      rtl/inc/astrings.pp

+ 20 - 12
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