aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/env/env.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/env/env.go')
-rw-r--r--internal/env/env.go28
1 files changed, 24 insertions, 4 deletions
diff --git a/internal/env/env.go b/internal/env/env.go
index 45fd5fcb..0c413733 100644
--- a/internal/env/env.go
+++ b/internal/env/env.go
@@ -1,21 +1,29 @@
-// Package env provides the [Paths] struct for efficiently building paths from the environment.
+// Package env provides the [Paths] struct for efficiently building paths from
+// the environment.
package env
import (
+ "errors"
+ "io/fs"
"log"
"os"
"strconv"
"hakurei.app/check"
+ "hakurei.app/fhs"
"hakurei.app/hst"
)
+const VarRunNscd = fhs.Var + "run/nscd"
+
// Paths holds paths copied from the environment and is used to create [hst.Paths].
type Paths struct {
// TempDir is returned by [os.TempDir].
TempDir *check.Absolute
// RuntimePath is copied from $XDG_RUNTIME_DIR.
RuntimePath *check.Absolute
+ // Whether [VarRunNscd] is a directory.
+ HasNscd bool
}
// Copy expands [Paths] into [hst.Paths].
@@ -37,14 +45,17 @@ func (env *Paths) Copy(v *hst.Paths, userid int) {
}
// CopyPaths returns a populated [Paths].
-func CopyPaths() *Paths { return CopyPathsFunc(log.Fatalf, os.TempDir, os.Getenv) }
+func CopyPaths() *Paths {
+ return CopyPathsFunc(log.Fatalf, os.TempDir, os.Getenv, os.Stat)
+}
-// CopyPathsFunc returns a populated [Paths],
-// using the provided [log.Fatalf], [os.TempDir], [os.Getenv] functions.
+// CopyPathsFunc returns a populated [Paths], using the provided [log.Fatalf],
+// [os.TempDir], [os.Getenv] functions.
func CopyPathsFunc(
fatalf func(format string, v ...any),
tempdir func() string,
getenv func(key string) string,
+ stat func(name string) (fs.FileInfo, error),
) *Paths {
const xdgRuntimeDir = "XDG_RUNTIME_DIR"
@@ -61,5 +72,14 @@ func CopyPathsFunc(
env.RuntimePath = a
}
+ if fi, err := stat(VarRunNscd); err != nil {
+ if !errors.Is(err, fs.ErrNotExist) {
+ fatalf("%v", err)
+ panic("unreachable")
+ }
+ } else {
+ env.HasNscd = fi.IsDir()
+ }
+
return &env
}