diff options
Diffstat (limited to 'internal/sys')
| -rw-r--r-- | internal/sys/interface.go | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/internal/sys/interface.go b/internal/sys/interface.go index 04bfe13a..5dbe18e6 100644 --- a/internal/sys/interface.go +++ b/internal/sys/interface.go @@ -3,10 +3,11 @@ package sys import ( "io/fs" + "log" "os/user" - "path" "strconv" + "hakurei.app/container" "hakurei.app/hst" "hakurei.app/internal/hlog" ) @@ -50,18 +51,23 @@ type State interface { // CopyPaths is a generic implementation of [hst.Paths]. func CopyPaths(os State, v *hst.Paths) { - v.SharePath = path.Join(os.TempDir(), "hakurei."+strconv.Itoa(os.Getuid())) + if tempDir, err := container.NewAbs(os.TempDir()); err != nil { + log.Fatalf("invalid TMPDIR: %v", err) + } else { + v.TempDir = tempDir + } + v.SharePath = v.TempDir.Append("hakurei." + strconv.Itoa(os.Getuid())) hlog.Verbosef("process share directory at %q", v.SharePath) - if r, ok := os.LookupEnv(xdgRuntimeDir); !ok || r == "" || !path.IsAbs(r) { + r, _ := os.LookupEnv(xdgRuntimeDir) + if a, err := container.NewAbs(r); err != nil { // fall back to path in share since hakurei has no hard XDG dependency - v.RunDirPath = path.Join(v.SharePath, "run") - v.RuntimePath = path.Join(v.RunDirPath, "compat") + v.RunDirPath = v.SharePath.Append("run") + v.RuntimePath = v.RunDirPath.Append("compat") } else { - v.RuntimePath = r - v.RunDirPath = path.Join(v.RuntimePath, "hakurei") + v.RuntimePath = a + v.RunDirPath = v.RuntimePath.Append("hakurei") } - hlog.Verbosef("runtime directory at %q", v.RunDirPath) } |
