diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-08-11 02:52:32 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-08-11 04:56:42 +0900 |
| commit | e99d7affb0c128fa82722f9b3d79c99b5e5918cd (patch) | |
| tree | 387e08d6c4363d8b9e0462f069c140fbdb15c917 /internal/sys/interface.go | |
| parent | 41ac2be9658b49c68cb793f3a6f0c5932d82e1c2 (diff) | |
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 <cat@gensokyo.uk>
Diffstat (limited to 'internal/sys/interface.go')
| -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) } |
