| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| //go:build windows | |
| // +build windows | |
| package cliconfig | |
| 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 | |
| } |