From e99d7affb0c128fa82722f9b3d79c99b5e5918cd Mon Sep 17 00:00:00 2001 From: Ophestra Date: Mon, 11 Aug 2025 02:52:32 +0900 Subject: container: use absolute for pathname This is simultaneously more efficient and less error-prone. This change caused minor API changes in multiple other packages. Signed-off-by: Ophestra --- internal/sys/interface.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'internal/sys/interface.go') 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) } -- cgit v1.3.1