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  }