From 971c7154b04d8dd00da932a26ecb6bb8d8fc133d Mon Sep 17 00:00:00 2001 From: Drew Richardson Date: Thu, 1 Apr 2021 17:05:24 -0700 Subject: [PATCH] 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 --- src/io/fs/sub.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/io/fs/sub.go b/src/io/fs/sub.go index d689b9e2bcf..7822e555eaa 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 +}