Merge pull request #260 from std0/union-readdir-fix - afero - [fork] go afero port for 9front
(HTM) git clone git@git.drkhsh.at/afero.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 27c9ee049885de0846b9326ffe09d128a545a323
(DIR) parent 215b26b36a36e64a212556bdfbce0e3aaee8fe1d
(HTM) Author: Michail Kargakis <kargakis@protonmail.com>
Date: Wed, 2 Sep 2020 22:07:05 +0200
Merge pull request #260 from std0/union-readdir-fix
Fix amount of files read in UnionFile.Readdir
Diffstat:
M composite_test.go | 20 ++++++++++++++++----
M unionFile.go | 17 +++++++----------
2 files changed, 23 insertions(+), 14 deletions(-)
---
(DIR) diff --git a/composite_test.go b/composite_test.go
@@ -477,7 +477,8 @@ func TestUnionFileReaddirAskForTooMany(t *testing.T) {
base := &MemMapFs{}
overlay := &MemMapFs{}
- for i := 0; i < 5; i++ {
+ const testFiles = 5
+ for i := 0; i < testFiles; i++ {
WriteFile(base, fmt.Sprintf("file%d.txt", i), []byte("afero"), 0777)
}
@@ -490,13 +491,24 @@ func TestUnionFileReaddirAskForTooMany(t *testing.T) {
defer f.Close()
- names, err := f.Readdirnames(6)
+ // Read part of all files
+ wantNames := 3
+ names, err := f.Readdirnames(wantNames)
if err != nil {
t.Fatal(err)
}
+ if len(names) != wantNames {
+ t.Fatalf("got %d names %v, want %d", len(names), names, wantNames)
+ }
- if len(names) != 5 {
- t.Fatal(names)
+ // Try to read more files than remaining
+ wantNames = testFiles - len(names)
+ names, err = f.Readdirnames(wantNames + 1)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(names) != wantNames {
+ t.Fatalf("got %d names %v, want %d", len(names), names, wantNames)
}
// End of directory
(DIR) diff --git a/unionFile.go b/unionFile.go
@@ -186,25 +186,22 @@ func (f *UnionFile) Readdir(c int) (ofi []os.FileInfo, err error) {
}
f.files = append(f.files, merged...)
}
+ files := f.files[f.off:]
- if c <= 0 && len(f.files) == 0 {
- return f.files, nil
+ if c <= 0 {
+ return files, nil
}
- if f.off >= len(f.files) {
+ if len(files) == 0 {
return nil, io.EOF
}
- if c <= 0 {
- return f.files[f.off:], nil
- }
-
- if c > len(f.files) {
- c = len(f.files)
+ if c > len(files) {
+ c = len(files)
}
defer func() { f.off += c }()
- return f.files[f.off:c], nil
+ return files[:c], nil
}
func (f *UnionFile) Readdirnames(c int) ([]string, error) {