io/fs: implement subFS.Sub

Calling fs.Sub with the result of fs.Sub multiple times creates a deep
call stack for Open and other methods. Enhance the fs.FS returned by
fs.Sub to implement fs.SubFS and reduce the call stack.

Fixes #45349

Change-Id: I10e10501e030176e10e2ae5ad260212e5c784bed
Reviewed-on: https://go-review.googlesource.com/c/go/+/306769
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Emmanuel Odeke <emmanuel@orijtech.com>
This commit is contained in:
Drew Richardson 2021-04-01 17:05:24 -07:00 committed by Emmanuel Odeke
parent 6986c02d72
commit 971c7154b0

View file

@ -125,3 +125,14 @@ func (f *subFS) Glob(pattern string) ([]string, error) {
}
return list, f.fixErr(err)
}
func (f *subFS) Sub(dir string) (FS, error) {
if dir == "." {
return f, nil
}
full, err := f.fullName("sub", dir)
if err != nil {
return nil, err
}
return &subFS{f.fsys, full}, nil
}