From 722989c68256469963aee963bed9c6ab4bf55b67 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Tue, 17 Mar 2026 15:56:36 +0900 Subject: fhs: move from container This package is not container-specific. Signed-off-by: Ophestra --- fhs/abs.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ fhs/fhs.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 fhs/abs.go create mode 100644 fhs/fhs.go (limited to 'fhs') diff --git a/fhs/abs.go b/fhs/abs.go new file mode 100644 index 00000000..ce2ae34d --- /dev/null +++ b/fhs/abs.go @@ -0,0 +1,49 @@ +package fhs + +import ( + _ "unsafe" // for go:linkname + + "hakurei.app/check" +) + +/* constants in this file bypass abs check, be extremely careful when changing them! */ + +// unsafeAbs returns check.Absolute on any string value. +// +//go:linkname unsafeAbs hakurei.app/check.unsafeAbs +func unsafeAbs(pathname string) *check.Absolute + +var ( + // AbsRoot is [Root] as [check.Absolute]. + AbsRoot = unsafeAbs(Root) + // AbsEtc is [Etc] as [check.Absolute]. + AbsEtc = unsafeAbs(Etc) + // AbsTmp is [Tmp] as [check.Absolute]. + AbsTmp = unsafeAbs(Tmp) + + // AbsRun is [Run] as [check.Absolute]. + AbsRun = unsafeAbs(Run) + // AbsRunUser is [RunUser] as [check.Absolute]. + AbsRunUser = unsafeAbs(RunUser) + + // AbsUsr is [Usr] as [check.Absolute]. + AbsUsr = unsafeAbs(Usr) + // AbsUsrBin is [UsrBin] as [check.Absolute]. + AbsUsrBin = unsafeAbs(UsrBin) + + // AbsVar is [Var] as [check.Absolute]. + AbsVar = unsafeAbs(Var) + // AbsVarLib is [VarLib] as [check.Absolute]. + AbsVarLib = unsafeAbs(VarLib) + + // AbsDev is [Dev] as [check.Absolute]. + AbsDev = unsafeAbs(Dev) + // AbsDevShm is [DevShm] as [check.Absolute]. + AbsDevShm = unsafeAbs(DevShm) + // AbsProc is [Proc] as [check.Absolute]. + AbsProc = unsafeAbs(Proc) + // AbsProcSelfExe is [ProcSelfExe] as [check.Absolute]. + AbsProcSelfExe = unsafeAbs(ProcSelfExe) + // AbsSys is [Sys] as [check.Absolute]. + AbsSys = unsafeAbs(Sys) +) diff --git a/fhs/fhs.go b/fhs/fhs.go new file mode 100644 index 00000000..6d098d0c --- /dev/null +++ b/fhs/fhs.go @@ -0,0 +1,51 @@ +// Package fhs provides constant and checked pathname values for common FHS paths. +package fhs + +const ( + // Root points to the file system root. + Root = "/" + // Etc points to the directory for system-specific configuration. + Etc = "/etc/" + // Tmp points to the place for small temporary files. + Tmp = "/tmp/" + + // Run points to a "tmpfs" file system for system packages to place runtime + // data, socket files, and similar. + Run = "/run/" + // RunUser points to a directory containing per-user runtime directories, + // each usually individually mounted "tmpfs" instances. + RunUser = Run + "user/" + + // Usr points to vendor-supplied operating system resources. + Usr = "/usr/" + // UsrBin points to binaries and executables for user commands that shall + // appear in the $PATH search path. + UsrBin = Usr + "bin/" + + // Var points to persistent, variable system data. Writable during normal + // system operation. + Var = "/var/" + // VarLib points to persistent system data. + VarLib = Var + "lib/" + // VarEmpty points to a nonstandard directory that is usually empty. + VarEmpty = Var + "empty/" + + // Dev points to the root directory for device nodes. + Dev = "/dev/" + // DevShm is the place for POSIX shared memory segments, as created via + // shm_open(3). + DevShm = "/dev/shm/" + // Proc points to a virtual kernel file system exposing the process list and + // other functionality. + Proc = "/proc/" + // ProcSys points to a hierarchy below /proc/ that exposes a number of + // kernel tunables. + ProcSys = Proc + "sys/" + // ProcSelf resolves to the process's own /proc/pid directory. + ProcSelf = Proc + "self/" + // ProcSelfExe is a symbolic link to program pathname. + ProcSelfExe = ProcSelf + "exe" + // Sys points to a virtual kernel file system exposing discovered devices + // and other functionality. + Sys = "/sys/" +) -- cgit v1.3.1