github.com/graywolf-at-work-2/terraform-vendor@v1.4.5/internal/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 }