diff options
Diffstat (limited to 'internal/env/env.go')
| -rw-r--r-- | internal/env/env.go | 28 |
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 } |
