From: Drew Richardson Date: Fri, 2 Apr 2021 00:05:24 +0000 (-0700) Subject: io/fs: implement subFS.Sub X-Git-Tag: go1.17beta1~866 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=971c7154b04d8dd00da932a26ecb6bb8d8fc133d;p=gostls13.git 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 TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor Trust: Emmanuel Odeke --- diff --git a/src/io/fs/sub.go b/src/io/fs/sub.go index d689b9e2bc..7822e555ea 100644 --- a/src/io/fs/sub.go +++ b/src/io/fs/sub.go @@ -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 +}