github.com/kevinklinger/open_terraform@v1.3.6/noninternal/command/cliconfig/config_windows.go (about)

     1  //go:build windows
     2  // +build windows
     3  
     4  package cliconfig
     5  
     6  import (
     7  	"path/filepath"
     8  	"syscall"
     9  	"unsafe"
    10  )
    11  
    12  var (
    13  	shell         = syscall.MustLoadDLL("Shell32.dll")
    14  	getFolderPath = shell.MustFindProc("SHGetFolderPathW")
    15  )
    16  
    17  const CSIDL_APPDATA = 26
    18  
    19  func configFile() (string, error) {
    20  	dir, err := homeDir()
    21  	if err != nil {
    22  		return "", err
    23  	}
    24  
    25  	return filepath.Join(dir, "terraform.rc"), nil
    26  }
    27  
    28  func configDir() (string, error) {
    29  	dir, err := homeDir()
    30  	if err != nil {
    31  		return "", err
    32  	}
    33  
    34  	return filepath.Join(dir, "terraform.d"), nil
    35  }
    36  
    37  func homeDir() (string, error) {
    38  	b := make([]uint16, syscall.MAX_PATH)
    39  
    40  	// See: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181(v=vs.85).aspx
    41  	r, _, err := getFolderPath.Call(0, CSIDL_APPDATA, 0, 0, uintptr(unsafe.Pointer(&b[0])))
    42  	if uint32(r) != 0 {
    43  		return "", err
    44  	}
    45  
    46  	return syscall.UTF16ToString(b), nil
    47  }