Browse Source

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

git-svn-id: trunk@48282 -
florian 4 years ago
parent
commit
f4c74b6b09
3 changed files with 35 additions and 1 deletions
  1. 1 0
      .gitattributes
  2. 1 1
      packages/fcl-base/src/bufstream.pp
  3. 33 0
      tests/webtbs/tw38351.pp

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

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