From 98da39a3ba019ee6e5a1a7cb2c82e20a3ef18c56 Mon Sep 17 00:00:00 2001 From: EinBurgbauer Date: Tue, 13 Apr 2021 09:30:59 +0200 Subject: [PATCH 1/3] properly reset internal state on close --- BeefLibs/corlib/src/IO/BufferedStream.bf | 7 ++++++- BeefLibs/corlib/src/IO/FileStream.bf | 8 ++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/BeefLibs/corlib/src/IO/BufferedStream.bf b/BeefLibs/corlib/src/IO/BufferedStream.bf index 24c0afd4..8fc12e57 100644 --- a/BeefLibs/corlib/src/IO/BufferedStream.bf +++ b/BeefLibs/corlib/src/IO/BufferedStream.bf @@ -179,7 +179,12 @@ namespace System.IO public override Result Close() { - return Flush(); + let ret = Flush(); + + mPos = 0; + mBufferPos = -Int32.MinValue; + mBufferEnd = -Int32.MinValue; + return ret; } } } diff --git a/BeefLibs/corlib/src/IO/FileStream.bf b/BeefLibs/corlib/src/IO/FileStream.bf index 6ffd0e44..c193b610 100644 --- a/BeefLibs/corlib/src/IO/FileStream.bf +++ b/BeefLibs/corlib/src/IO/FileStream.bf @@ -371,14 +371,14 @@ namespace System.IO public override Result Close() { - var hadError = Flush() case .Err; + let ret = base.Close(); if (mBfpFile != null) Platform.BfpFile_Release(mBfpFile); + mBfpFile = null; mFileAccess = default; - if (hadError) - return .Err; - return .Ok; + mBfpFilePos = 0; + return ret; } protected override void UpdateLength() From 32966b79a6a90e84d8dedf4164740500e28a82bf Mon Sep 17 00:00:00 2001 From: EinBurgbauer Date: Thu, 9 Dec 2021 19:34:01 +0100 Subject: [PATCH 2/3] buffered stream seek accepts everything by default + fromEnd fix --- BeefLibs/corlib/src/IO/BufferedStream.bf | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/BeefLibs/corlib/src/IO/BufferedStream.bf b/BeefLibs/corlib/src/IO/BufferedStream.bf index 91bf3a37..be432b08 100644 --- a/BeefLibs/corlib/src/IO/BufferedStream.bf +++ b/BeefLibs/corlib/src/IO/BufferedStream.bf @@ -19,7 +19,7 @@ namespace System.IO set { - mPos = Math.Min(value, Length); + mPos = value; } } @@ -43,20 +43,16 @@ namespace System.IO public override Result Seek(int64 pos, SeekKind seekKind = .Absolute) { - int64 length = Length; - - int64 newPos; switch (seekKind) { case .Absolute: - mPos = Math.Min(pos, length); - if (pos > length) - return .Err; + mPos = pos; case .FromEnd: - newPos = length - pos; + mPos = Length + pos; case .Relative: - mPos = Math.Min(mPos + pos, length); + mPos = mPos + pos; } + return .Ok; } From e13f194c6fb00f586df8aec45f9fdb4d6b41714c Mon Sep 17 00:00:00 2001 From: EinBurgbauer Date: Thu, 9 Dec 2021 20:04:17 +0100 Subject: [PATCH 3/3] make BufferedFileStream act like UnbufferedFileStream --- BeefLibs/corlib/src/IO/FileStream.bf | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/BeefLibs/corlib/src/IO/FileStream.bf b/BeefLibs/corlib/src/IO/FileStream.bf index 25cb1607..de46955a 100644 --- a/BeefLibs/corlib/src/IO/FileStream.bf +++ b/BeefLibs/corlib/src/IO/FileStream.bf @@ -296,6 +296,15 @@ namespace System.IO } } + public override int64 Position + { + set + { + // Matches the behavior of Platform.BfpFile_Seek(mBfpFile, value, .Absolute); + mPos = Math.Max(value, 0); + } + } + public this() { @@ -416,6 +425,27 @@ namespace System.IO mFileAccess = access; } + public override Result Seek(int64 pos, SeekKind seekKind = .Absolute) + { + int64 newPos; + switch (seekKind) + { + case .Absolute: + newPos = pos; + case .FromEnd: + newPos = Length + pos; + case .Relative: + newPos = mPos + pos; + } + + // Matches the behaviour of Platform.BfpFile_Seek(mBfpFile, value, .Absolute); + mPos = Math.Max(newPos, 0); + if (seekKind == .Absolute && newPos < 0) + return .Err; + + return .Ok; + } + public override Result Close() { let ret = base.Close();