From 6876e45f9e9dc18adf7c0d07a9f2429ed0b9d176 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn <github@gone.nl> Date: Mon, 26 Jun 2023 14:43:26 +0200 Subject: [PATCH] pkg/homedir: unify implementations Unify some of the exported functions instead of maintaining separate functions per platform. Signed-off-by: Sebastiaan van Stijn <github@gone.nl> --- pkg/homedir/homedir.go | 40 ++++++++++++++++++++++++++++++++++ pkg/homedir/homedir_unix.go | 36 +++--------------------------- pkg/homedir/homedir_windows.go | 25 +++------------------ 3 files changed, 46 insertions(+), 55 deletions(-) create mode 100644 pkg/homedir/homedir.go diff --git a/pkg/homedir/homedir.go b/pkg/homedir/homedir.go new file mode 100644 index 0000000000..ebd22a8b99 --- /dev/null +++ b/pkg/homedir/homedir.go @@ -0,0 +1,40 @@ +package homedir + +import ( + "os" + "os/user" + "runtime" +) + +// Key returns the env var name for the user's home dir based on +// the platform being run on. +func Key() string { + return envKeyName +} + +// Get returns the home directory of the current user with the help of +// environment variables depending on the target operating system. +// Returned path should be used with "path/filepath" to form new paths. +// +// On non-Windows platforms, it falls back to nss lookups, if the home +// directory cannot be obtained from environment-variables. +// +// If linking statically with cgo enabled against glibc, ensure the +// osusergo build tag is used. +// +// If needing to do nss lookups, do not disable cgo or set osusergo. +func Get() string { + home, _ := os.UserHomeDir() + if home == "" && runtime.GOOS != "windows" { + if u, err := user.Current(); err == nil { + return u.HomeDir + } + } + return home +} + +// GetShortcutString returns the string that is shortcut to user's home directory +// in the native shell of the platform running on. +func GetShortcutString() string { + return homeShortCut +} diff --git a/pkg/homedir/homedir_unix.go b/pkg/homedir/homedir_unix.go index 771ed7cb12..feae4d736c 100644 --- a/pkg/homedir/homedir_unix.go +++ b/pkg/homedir/homedir_unix.go @@ -2,37 +2,7 @@ package homedir // import "github.com/docker/docker/pkg/homedir" -import ( - "os" - "os/user" +const ( + envKeyName = "HOME" + homeShortCut = "~" ) - -// Key returns the env var name for the user's home dir based on -// the platform being run on -func Key() string { - return "HOME" -} - -// Get returns the home directory of the current user with the help of -// environment variables depending on the target operating system. -// Returned path should be used with "path/filepath" to form new paths. -// -// If linking statically with cgo enabled against glibc, ensure the -// osusergo build tag is used. -// -// If needing to do nss lookups, do not disable cgo or set osusergo. -func Get() string { - home, _ := os.UserHomeDir() - if home == "" { - if u, err := user.Current(); err == nil { - return u.HomeDir - } - } - return home -} - -// GetShortcutString returns the string that is shortcut to user's home directory -// in the native shell of the platform running on. -func GetShortcutString() string { - return "~" -} diff --git a/pkg/homedir/homedir_windows.go b/pkg/homedir/homedir_windows.go index 4e6bf3ff4a..37f4ee6701 100644 --- a/pkg/homedir/homedir_windows.go +++ b/pkg/homedir/homedir_windows.go @@ -1,25 +1,6 @@ package homedir // import "github.com/docker/docker/pkg/homedir" -import ( - "os" +const ( + envKeyName = "USERPROFILE" + homeShortCut = "%USERPROFILE%" // be careful while using in format functions ) - -// Key returns the env var name for the user's home dir based on -// the platform being run on -func Key() string { - return "USERPROFILE" -} - -// Get returns the home directory of the current user with the help of -// environment variables depending on the target operating system. -// Returned path should be used with "path/filepath" to form new paths. -func Get() string { - home, _ := os.UserHomeDir() - return home -} - -// GetShortcutString returns the string that is shortcut to user's home directory -// in the native shell of the platform running on. -func GetShortcutString() string { - return "%USERPROFILE%" // be careful while using in format functions -}