From f4c74b6b09d9b312f7c36010dfecafa9cdac8fc3 Mon Sep 17 00:00:00 2001 From: florian Date: Thu, 21 Jan 2021 21:08:13 +0000 Subject: [PATCH] * fix TBufferedFileStream.Seek(0,soBeginning) as proposed by Andrey Zubarev, resolves #38351 git-svn-id: trunk@48282 - --- .gitattributes | 1 + packages/fcl-base/src/bufstream.pp | 2 +- tests/webtbs/tw38351.pp | 33 ++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 tests/webtbs/tw38351.pp diff --git a/.gitattributes b/.gitattributes index d03722d41b..fd76923363 100644 --- a/.gitattributes +++ b/.gitattributes @@ -18642,6 +18642,7 @@ tests/webtbs/tw38316.pp svneol=native#text/plain tests/webtbs/tw3833.pp svneol=native#text/plain tests/webtbs/tw38337.pp svneol=native#text/plain tests/webtbs/tw38339.pp svneol=native#text/plain +tests/webtbs/tw38351.pp -text svneol=native#text/pascal tests/webtbs/tw3840.pp svneol=native#text/plain tests/webtbs/tw3841.pp svneol=native#text/plain tests/webtbs/tw3863.pp svneol=native#text/plain diff --git a/packages/fcl-base/src/bufstream.pp b/packages/fcl-base/src/bufstream.pp index 81ae8d377a..2517542e97 100644 --- a/packages/fcl-base/src/bufstream.pp +++ b/packages/fcl-base/src/bufstream.pp @@ -812,7 +812,7 @@ begin lNewOffset:=FCacheStreamPosition+Offset; end; end; - if lNewOffset>0 then begin + if lNewOffset>=0 then begin FCacheStreamPosition:=lNewOffset; Result:=lNewOffset; end else begin diff --git a/tests/webtbs/tw38351.pp b/tests/webtbs/tw38351.pp new file mode 100644 index 0000000000..d76d639b4c --- /dev/null +++ b/tests/webtbs/tw38351.pp @@ -0,0 +1,33 @@ +{$MODE OBJFPC} +{$APPTYPE CONSOLE} + +uses Classes, BufStream, Sysutils; + +procedure TestBufferedFileStream; +var + F: TStream; + pf: File; +begin + Assign(pf,'tw38351.tmp'); + Rewrite(pf,1); + Seek(pf,100); + Close(pf); + F := TBufferedFileStream.Create('tw38351.tmp', fmOpenRead); + try + Writeln(F.Position); + if F.Position<>0 then + halt(1); + Writeln(F.Seek(0, soBeginning)); // TFileStream = 0, TBufferedFileStream = -1 + Writeln(F.Position); + if F.Position<>0 then + halt(1); + finally + F.Free; + DeleteFile('tw38351.tmp'); + end; +end; + +begin + TestBufferedFileStream; + writeln('ok'); +end.