From 9b23fafe854f9ff68379ba581f009beade3f6810 Mon Sep 17 00:00:00 2001
From: Ketmar Dark <ketmar@ketmar.no-ip.org>
Date: Fri, 8 Apr 2016 11:15:24 +0300
Subject: [PATCH] sfs: better memory r/o stream

---
 src/sfs/xstreams.pas | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/sfs/xstreams.pas b/src/sfs/xstreams.pas
index 20a503f..1861c61 100644
--- a/src/sfs/xstreams.pas
+++ b/src/sfs/xstreams.pas
@@ -85,8 +85,13 @@ type
   end;
 
   TSFSMemoryStreamRO = class(TCustomMemoryStream)
+  private
+    fFreeMem: Boolean;
+    fMem: Pointer;
+
   public
-    constructor Create (pMem: Pointer; pSize: Integer);
+    constructor Create (pMem: Pointer; pSize: Integer; aFreeMem: Boolean=false);
+    destructor Destroy (); override;
 
     function Write (const buffer; count: LongInt): LongInt; override;
   end;
@@ -286,13 +291,20 @@ end;
 
 
 { TSFSMemoryStreamRO }
-constructor TSFSMemoryStreamRO.Create (pMem: Pointer; pSize: Integer);
+constructor TSFSMemoryStreamRO.Create (pMem: Pointer; pSize: Integer; aFreeMem: Boolean=false);
 begin
+  fFreeMem := aFreeMem;
+  fMem := pMem;
   inherited Create();
   SetPointer(pMem, pSize);
   Position := 0;
 end;
 
+destructor TSFSMemoryStreamRO.Destroy ();
+begin
+  if fFreeMem and (fMem <> nil) then FreeMem(fMem);
+end;
+
 function TSFSMemoryStreamRO.Write (const buffer; count: LongInt): LongInt;
 begin
   result := 0;
-- 
2.29.2