github.com/moby/docker@v26.1.3+incompatible/pkg/directory/directory_windows.go (about) 1 package directory // import "github.com/docker/docker/pkg/directory" 2 3 import ( 4 "context" 5 "os" 6 "path/filepath" 7 ) 8 9 // calcSize walks a directory tree and returns its total calcSize in bytes. 10 func calcSize(ctx context.Context, dir string) (int64, error) { 11 var size int64 12 err := filepath.Walk(dir, func(d string, fileInfo os.FileInfo, err error) error { 13 if err != nil { 14 // if dir/x disappeared while walking, Size() ignores dir/x. 15 // if dir does not exist, Size() returns the error. 16 if d != dir && os.IsNotExist(err) { 17 return nil 18 } 19 return err 20 } 21 22 select { 23 case <-ctx.Done(): 24 return ctx.Err() 25 default: 26 } 27 28 // Ignore directory sizes 29 if fileInfo == nil { 30 return nil 31 } 32 33 s := fileInfo.Size() 34 if fileInfo.IsDir() || s == 0 { 35 return nil 36 } 37 38 size += s 39 40 return nil 41 }) 42 return size, err 43 }