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) {