src/os: Add UserHomeDir() function to os package

This commit adds the `UserHomeDir()` function to the `os` package.
Этот коммит содержится в:
ZauberNerd 2022-03-05 00:24:33 +00:00 коммит произвёл Ron Evans
родитель 6f31712b7d
коммит 6fb90b6fc4
2 изменённых файлов: 45 добавлений и 0 удалений

Просмотреть файл

@ -12,6 +12,7 @@ package os
import (
"errors"
"io"
"runtime"
"syscall"
)
@ -259,3 +260,29 @@ func Getwd() (string, error) {
func TempDir() string {
return tempDir()
}
// UserHomeDir returns the current user's home directory.
//
// On Unix, including macOS, it returns the $HOME environment variable.
// On Windows, it returns %USERPROFILE%.
// On Plan 9, it returns the $home environment variable.
func UserHomeDir() (string, error) {
env, enverr := "HOME", "$HOME"
switch runtime.GOOS {
case "windows":
env, enverr = "USERPROFILE", "%userprofile%"
case "plan9":
env, enverr = "home", "$home"
}
if v := Getenv(env); v != "" {
return v, nil
}
// On some geese the home directory is not always defined.
switch runtime.GOOS {
case "android":
return "/sdcard", nil
case "ios":
return "/", nil
}
return "", errors.New(enverr + " is not defined")
}

Просмотреть файл

@ -253,3 +253,21 @@ func TestRenameFailed(t *testing.T) {
t.Errorf("rename %q, %q: expected %T, got %T %v", from, to, new(LinkError), err, err)
}
}
func TestUserHomeDir(t *testing.T) {
dir, err := UserHomeDir()
if dir == "" && err == nil {
t.Fatal("UserHomeDir returned an empty string but no error")
}
if err != nil {
t.Logf("UserHomeDir failed: %v", err)
return
}
fi, err := Stat(dir)
if err != nil {
t.Fatal(err)
}
if !fi.IsDir() {
t.Fatalf("dir %s is not directory; type = %v", dir, fi.Mode())
}
}