src/os: Add UserHomeDir() function to os package
This commit adds the `UserHomeDir()` function to the `os` package.
Этот коммит содержится в:
		
							родитель
							
								
									6f31712b7d
								
							
						
					
					
						коммит
						6fb90b6fc4
					
				
					 2 изменённых файлов: 45 добавлений и 0 удалений
				
			
		|  | @ -12,6 +12,7 @@ package os | ||||||
| import ( | import ( | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"io" | 	"io" | ||||||
|  | 	"runtime" | ||||||
| 	"syscall" | 	"syscall" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -259,3 +260,29 @@ func Getwd() (string, error) { | ||||||
| func TempDir() string { | func TempDir() string { | ||||||
| 	return tempDir() | 	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) | 		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()) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 ZauberNerd
						ZauberNerd