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 ( | ||||
| 	"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()) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 ZauberNerd
						ZauberNerd