From 70e1037a49e88dcee1efecf0a136bd3139610742 Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Fri, 11 Apr 2025 21:49:25 +0200 Subject: [PATCH] fs/reader: fix open+stat handling --- internal/fs/fs_reader.go | 3 +++ internal/fs/fs_reader_test.go | 30 ++++++++++++++++++++---------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/internal/fs/fs_reader.go b/internal/fs/fs_reader.go index 7e6aa0f58..97e09d1d2 100644 --- a/internal/fs/fs_reader.go +++ b/internal/fs/fs_reader.go @@ -128,6 +128,9 @@ func (fs *Reader) OpenFile(name string, flag int, _ bool) (f File, err error) { } f = fakeDir{ + fakeFile: fakeFile{ + fi: item.fi, + }, entries: slices.Clone(item.children), } return f, nil diff --git a/internal/fs/fs_reader_test.go b/internal/fs/fs_reader_test.go index f49cc0d8d..ef95083ae 100644 --- a/internal/fs/fs_reader_test.go +++ b/internal/fs/fs_reader_test.go @@ -183,28 +183,38 @@ func createDirTest(fpath string, now time.Time) fsTest { { name: "dir/Open-slash-" + fpath, f: func(t *testing.T, fs FS) { - fi, err := fs.Lstat("/" + fpath) - if err != nil { - t.Fatal(err) - } - + fi := fsStatDir(t, fs, "/"+fpath) checkFileInfo(t, fi, "/"+fpath, now, os.ModeDir|0755, true) }, }, { name: "dir/Open-current-" + fpath, f: func(t *testing.T, fs FS) { - fi, err := fs.Lstat("./" + fpath) - if err != nil { - t.Fatal(err) - } - + fi := fsStatDir(t, fs, "./"+fpath) checkFileInfo(t, fi, "/"+fpath, now, os.ModeDir|0755, true) }, }, } } +func fsStatDir(t *testing.T, fs FS, fpath string) *ExtendedFileInfo { + f, err := fs.OpenFile(fpath, O_RDONLY, false) + if err != nil { + t.Fatal(err) + } + + fi, err := f.Stat() + if err != nil { + t.Fatal(err) + } + + err = f.Close() + if err != nil { + t.Fatal(err) + } + return fi +} + func TestFSReader(t *testing.T) { data := test.Random(55, 1<<18+588) now := time.Now()