Pārlūkot izejas kodu

--- Merging r48282 into '.':
U packages/fcl-base/src/bufstream.pp
A tests/webtbs/tw38351.pp
--- Recording mergeinfo for merge of r48282 into '.':
U .

# revisions: 48282
r48282 | florian | 2021-01-21 22:08:13 +0100 (Thu, 21 Jan 2021) | 1 line
Changed paths:
M /trunk/packages/fcl-base/src/bufstream.pp
A /trunk/tests/webtbs/tw38351.pp

* fix TBufferedFileStream.Seek(0,soBeginning) as proposed by Andrey Zubarev, resolves #38351

git-svn-id: branches/fixes_3_2@49111 -

marco 4 gadi atpakaļ
vecāks
revīzija
b660729f12
3 mainītis faili ar 35 papildinājumiem un 1 dzēšanām
  1. 1 0
      .gitattributes
  2. 1 1
      packages/fcl-base/src/bufstream.pp
  3. 33 0
      tests/webtbs/tw38351.pp

+ 1 - 0
.gitattributes

@@ -17845,6 +17845,7 @@ tests/webtbs/tw3829.pp svneol=native#text/plain
 tests/webtbs/tw38306.pp -text svneol=native#text/pascal
 tests/webtbs/tw3833.pp svneol=native#text/plain
 tests/webtbs/tw38337.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/tw38429.pp svneol=native#text/pascal

+ 1 - 1
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

+ 33 - 0
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.