diff options
Diffstat (limited to 'internal/environ.go')
| -rw-r--r-- | internal/environ.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/internal/environ.go b/internal/environ.go new file mode 100644 index 00000000..25f44964 --- /dev/null +++ b/internal/environ.go @@ -0,0 +1,59 @@ +package internal + +import ( + "fmt" + "os" + "path" + "strconv" + "sync" + + "git.ophivana.moe/cat/fortify/internal/verbose" +) + +// state that remain constant for the lifetime of the process +// fetched and cached here + +const ( + xdgRuntimeDir = "XDG_RUNTIME_DIR" +) + +// SystemConstants contains state from the operating system +type SystemConstants struct { + // path to shared directory e.g. /tmp/fortify.%d + SharePath string `json:"share_path"` + // XDG_RUNTIME_DIR value e.g. /run/user/%d + RuntimePath string `json:"runtime_path"` + // application runtime directory e.g. /run/user/%d/fortify + RunDirPath string `json:"run_dir_path"` +} + +var ( + scVal SystemConstants + scOnce sync.Once +) + +func copySC() { + sc := SystemConstants{ + SharePath: path.Join(os.TempDir(), "fortify."+strconv.Itoa(os.Geteuid())), + } + + verbose.Println("process share directory at", sc.SharePath) + + // runtimePath, runDirPath + if r, ok := os.LookupEnv(xdgRuntimeDir); !ok { + fmt.Println("Env variable", xdgRuntimeDir, "unset") + os.Exit(1) + } else { + sc.RuntimePath = r + sc.RunDirPath = path.Join(sc.RuntimePath, "fortify") + verbose.Println("XDG runtime directory at", sc.RunDirPath) + } + + scVal = sc +} + +// GetSC returns a populated SystemConstants value +func GetSC() SystemConstants { + scOnce.Do(copySC) + return scVal +} |
