github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/util/osutil/path_windows.go (about)

     1  package osutil
     2  
     3  import (
     4  	"path/filepath"
     5  
     6  	"golang.org/x/sys/windows"
     7  )
     8  
     9  // GetLongPathName converts Windows short pathnames to full pathnames.
    10  // For example C:\Users\ADMIN~1 --> C:\Users\Administrator.
    11  func GetLongPathName(path string) (string, error) {
    12  	// See https://groups.google.com/forum/#!topic/golang-dev/1tufzkruoTg
    13  	p, err := windows.UTF16FromString(path)
    14  	if err != nil {
    15  		return "", err
    16  	}
    17  	b := p // GetLongPathName says we can reuse buffer
    18  	n, err := windows.GetLongPathName(&p[0], &b[0], uint32(len(b)))
    19  	if err != nil {
    20  		return "", err
    21  	}
    22  	if n > uint32(len(b)) {
    23  		b = make([]uint16, n)
    24  		_, err = windows.GetLongPathName(&p[0], &b[0], uint32(len(b)))
    25  		if err != nil {
    26  			return "", err
    27  		}
    28  	}
    29  	return windows.UTF16ToString(b), nil
    30  }
    31  
    32  func SanitizePath(path string) string {
    33  	return filepath.ToSlash(filepath.Clean(path))
    34  }