All checks were successful
Test / Create distribution (push) Successful in 1m10s
Test / Sandbox (push) Successful in 2m40s
Test / Hakurei (push) Successful in 3m58s
Test / Hpkg (push) Successful in 4m44s
Test / Sandbox (race detector) (push) Successful in 5m1s
Test / Hakurei (race detector) (push) Successful in 6m2s
Test / Flake checks (push) Successful in 1m47s
This frees all container instances of side effects. Signed-off-by: Ophestra <cat@gensokyo.uk>
37 lines
1.0 KiB
Go
37 lines
1.0 KiB
Go
package app
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"hakurei.app/container"
|
|
"hakurei.app/hst"
|
|
)
|
|
|
|
// CopyPaths populates a [hst.Paths] struct.
|
|
func CopyPaths(msg container.Msg, v *hst.Paths, userid int) { copyPaths(direct{}, msg, v, userid) }
|
|
|
|
// copyPaths populates a [hst.Paths] struct.
|
|
func copyPaths(k syscallDispatcher, msg container.Msg, v *hst.Paths, userid int) {
|
|
const xdgRuntimeDir = "XDG_RUNTIME_DIR"
|
|
|
|
if tempDir, err := container.NewAbs(k.tempdir()); err != nil {
|
|
k.fatalf("invalid TMPDIR: %v", err)
|
|
} else {
|
|
v.TempDir = tempDir
|
|
}
|
|
|
|
v.SharePath = v.TempDir.Append("hakurei." + strconv.Itoa(userid))
|
|
msg.Verbosef("process share directory at %q", v.SharePath)
|
|
|
|
r, _ := k.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 = v.SharePath.Append("run")
|
|
v.RuntimePath = v.RunDirPath.Append("compat")
|
|
} else {
|
|
v.RuntimePath = a
|
|
v.RunDirPath = v.RuntimePath.Append("hakurei")
|
|
}
|
|
msg.Verbosef("runtime directory at %q", v.RunDirPath)
|
|
}
|