TMemoryStream cannot save stream size 3Gb

In the current dev version, in classesh.inc, we have

  TStream = class(TObject)
...
  public
    function Read(var Buffer; Count: Longint): Longint; virtual; overload;
    function Write(const Buffer; Count: Longint): Longint; virtual; overload;
    procedure ReadBuffer(var Buffer; Count: Longint);
    procedure WriteBuffer(const Buffer; Count: Longint);      

You see that WriteBuffer has Longint, so it cannot save stream size of 3Gb. WriteBuffer calls this code:

function TMemoryStream.Write(const Buffer; Count: LongInt): LongInt;
Var NewPos : PtrInt;
begin
...
end;

Demo attached. You will get zero-sized file on Ubuntu x64.

save3g.pas

Edited by Alexey Torgashin