github.com/hhrutter/nomad@v0.6.0-rc2.0.20170723054333-80c4b03f0705/client/fingerprint/storage_windows.go (about)

     1  package fingerprint
     2  
     3  import (
     4  	"fmt"
     5  	"path/filepath"
     6  	"syscall"
     7  )
     8  
     9  //go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zstorage_windows.go storage_windows.go
    10  
    11  //sys	getDiskFreeSpaceEx(dirName *uint16, availableFreeBytes *uint64, totalBytes *uint64, totalFreeBytes *uint64) (err error) = kernel32.GetDiskFreeSpaceExW
    12  
    13  // diskFree inspects the filesystem for path and returns the volume name and
    14  // the total and free bytes available on the file system.
    15  func (f *StorageFingerprint) diskFree(path string) (volume string, total, free uint64, err error) {
    16  	absPath, err := filepath.Abs(path)
    17  	if err != nil {
    18  		return "", 0, 0, fmt.Errorf("failed to determine absolute path for %s", path)
    19  	}
    20  
    21  	volume = filepath.VolumeName(absPath)
    22  
    23  	absPathp, err := syscall.UTF16PtrFromString(absPath)
    24  	if err != nil {
    25  		return "", 0, 0, fmt.Errorf("failed to convert \"%s\" to UTF16: %v", absPath, err)
    26  	}
    27  
    28  	if err := getDiskFreeSpaceEx(absPathp, nil, &total, &free); err != nil {
    29  		return "", 0, 0, fmt.Errorf("failed to get free disk space for %s: %v", absPath, err)
    30  	}
    31  
    32  	return volume, total, free, nil
    33  }