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