rendered paste bodyfunction ApplyPatch(OldData, Patch: String): String;
var
OldStream, PatchStream, NewStream: TMemoryStream;
X: Integer;
begin
OldStream := StringToStream(OldData);
PatchStream := StringToStream(Patch);
WriteLn(Format('Patch verification: %s', [StreamToString(PatchStream)]));
WriteLn(Format('Patch verification: %s', [StreamToString(PatchStream)]));
NewStream := TMemoryStream.Create;
try
bpatch_(OldStream, NewStream, PatchStream);
Result := StreamToString(NewStream);
finally
FreeAndNil(OldStream);
FreeAndNil(PatchStream);
FreeAndNil(NewStream);
end;
end;
function StringToStream(Value: String): TMemoryStream;
begin
Result := TMemoryStream.Create;
Result.WriteBuffer(Value[1], Length(Value));
Result.Position := 0;
end;
function StreamToString(Stream: TStream): String;
var
OldPos: Int64;
begin
SetLength(Result, Stream.Size);
OldPos := Stream.Position;
Stream.Position := 0;
Stream.WriteBuffer(Result[1], Length(Result));
Stream.Position := OldPos;
end;