github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/shell/paths_windows.go (about)

     1  package shell
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  
     8  	"golang.org/x/sys/windows"
     9  	"github.com/markusbkk/elvish/pkg/env"
    10  )
    11  
    12  func newRCPath() (string, error) {
    13  	d, err := roamingAppData()
    14  	if err != nil {
    15  		return "", err
    16  	}
    17  	return filepath.Join(d, "elvish", "rc.elv"), nil
    18  }
    19  
    20  func newLibPaths() ([]string, error) {
    21  	local, err := localAppData()
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  	localLib := filepath.Join(local, "elvish", "lib")
    26  
    27  	roaming, err := roamingAppData()
    28  	if err != nil {
    29  		return nil, err
    30  	}
    31  	roamingLib := filepath.Join(roaming, "elvish", "lib")
    32  
    33  	return []string{roamingLib, localLib}, nil
    34  }
    35  
    36  func newDBPath() (string, error) {
    37  	d, err := localAppData()
    38  	if err != nil {
    39  		return "", err
    40  	}
    41  	return filepath.Join(d, "elvish", "db.bolt"), nil
    42  }
    43  
    44  func localAppData() (string, error) {
    45  	return windows.KnownFolderPath(windows.FOLDERID_LocalAppData, windows.KF_FLAG_CREATE)
    46  }
    47  
    48  func roamingAppData() (string, error) {
    49  	return windows.KnownFolderPath(windows.FOLDERID_RoamingAppData, windows.KF_FLAG_CREATE)
    50  }
    51  
    52  // getSecureRunDir stats elvish-$USERNAME under the default temp dir, creating
    53  // it if it doesn't yet exist, and return the directory name.
    54  func secureRunDir() (string, error) {
    55  	username := os.Getenv(env.USERNAME)
    56  
    57  	runDir := filepath.Join(os.TempDir(), "elvish-"+username)
    58  	err := os.MkdirAll(runDir, 0700)
    59  	if err != nil {
    60  		return "", fmt.Errorf("mkdir: %v", err)
    61  	}
    62  
    63  	return runDir, nil
    64  }