47 lines
852 B
Go
47 lines
852 B
Go
// +build windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"path/filepath"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
var (
|
|
shell = syscall.MustLoadDLL("Shell32.dll")
|
|
getFolderPath = shell.MustFindProc("SHGetFolderPathW")
|
|
)
|
|
|
|
const CSIDL_APPDATA = 26
|
|
|
|
func configFile() (string, error) {
|
|
dir, err := homeDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return filepath.Join(dir, "terraform.rc"), nil
|
|
}
|
|
|
|
func configDir() (string, error) {
|
|
dir, err := homeDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return filepath.Join(dir, "terraform.d"), nil
|
|
}
|
|
|
|
func homeDir() (string, error) {
|
|
b := make([]uint16, syscall.MAX_PATH)
|
|
|
|
// See: http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181(v=vs.85).aspx
|
|
r, _, err := getFolderPath.Call(0, CSIDL_APPDATA, 0, 0, uintptr(unsafe.Pointer(&b[0])))
|
|
if uint32(r) != 0 {
|
|
return "", err
|
|
}
|
|
|
|
return syscall.UTF16ToString(b), nil
|
|
}
|