aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/state
diff options
context:
space:
mode:
Diffstat (limited to 'internal/state')
-rw-r--r--internal/state/enablement.go34
-rw-r--r--internal/state/exit.go2
-rw-r--r--internal/state/register.go7
-rw-r--r--internal/state/track.go57
4 files changed, 86 insertions, 14 deletions
diff --git a/internal/state/enablement.go b/internal/state/enablement.go
new file mode 100644
index 00000000..9358f432
--- /dev/null
+++ b/internal/state/enablement.go
@@ -0,0 +1,34 @@
+package state
+
+type (
+ Enablement uint8
+ Enablements uint64
+)
+
+const (
+ EnableWayland Enablement = iota
+ EnableX
+ EnableDBus
+ EnablePulse
+
+ enableLength
+)
+
+var enablementString = [enableLength]string{
+ "Wayland",
+ "X11",
+ "D-Bus",
+ "PulseAudio",
+}
+
+func (e Enablement) String() string {
+ return enablementString[e]
+}
+
+func (e Enablement) Mask() Enablements {
+ return 1 << e
+}
+
+func (es Enablements) Has(e Enablement) bool {
+ return es&e.Mask() != 0
+}
diff --git a/internal/state/exit.go b/internal/state/exit.go
index e0e2c04a..3da1f48e 100644
--- a/internal/state/exit.go
+++ b/internal/state/exit.go
@@ -33,7 +33,7 @@ func BeforeExit() {
}
}
- if d, err := readLaunchers(); err != nil {
+ if d, err := readLaunchers(u.Uid); err != nil {
fmt.Println("Error reading active launchers:", err)
os.Exit(1)
} else if len(d) > 0 {
diff --git a/internal/state/register.go b/internal/state/register.go
index 2fff565e..25c22894 100644
--- a/internal/state/register.go
+++ b/internal/state/register.go
@@ -4,6 +4,13 @@ func RegisterRevertPath(p string) {
cleanupCandidate = append(cleanupCandidate, p)
}
+func RegisterEnablement(e Enablements) {
+ if enablements != nil {
+ panic("enablement state set twice")
+ }
+ enablements = &e
+}
+
func XcbActionComplete() {
if xcbActionComplete {
Fatal("xcb inserted twice")
diff --git a/internal/state/track.go b/internal/state/track.go
index 913d684d..96e9353d 100644
--- a/internal/state/track.go
+++ b/internal/state/track.go
@@ -10,6 +10,8 @@ import (
"os/exec"
"path"
"strconv"
+ "strings"
+ "text/tabwriter"
"git.ophivana.moe/cat/fortify/internal/system"
)
@@ -22,13 +24,15 @@ var (
statePath string
cleanupCandidate []string
xcbActionComplete bool
+ enablements *Enablements
)
type launcherState struct {
- PID int
- Launcher string
- Argv []string
- Command []string
+ PID int
+ Launcher string
+ Argv []string
+ Command []string
+ Capability Enablements
}
func init() {
@@ -40,15 +44,41 @@ func Early() {
return
}
- launchers, err := readLaunchers()
+ launchers, err := readLaunchers(u.Uid)
if err != nil {
fmt.Println("Error reading launchers:", err)
os.Exit(1)
}
- fmt.Println("\tPID\tLauncher")
+ stdout := tabwriter.NewWriter(os.Stdout, 0, 1, 4, ' ', 0)
+ if !system.V.Verbose {
+ _, _ = fmt.Fprintln(stdout, "\tPID\tEnablements\tLauncher\tCommand")
+ } else {
+ _, _ = fmt.Fprintln(stdout, "\tPID\tArgv")
+ }
+
for _, state := range launchers {
- fmt.Printf("\t%d\t%s\nCommand: %s\nArgv: %s\n", state.PID, state.Launcher, state.Command, state.Argv)
+ enablementsDescription := strings.Builder{}
+ for i := Enablement(0); i < enableLength; i++ {
+ if state.Capability.Has(i) {
+ enablementsDescription.WriteString(", " + i.String())
+ }
+ }
+ if enablementsDescription.Len() == 0 {
+ enablementsDescription.WriteString("none")
+ }
+
+ if !system.V.Verbose {
+ _, _ = fmt.Fprintf(stdout, "\t%d\t%s\t%s\t%s\n",
+ state.PID, strings.TrimPrefix(enablementsDescription.String(), ", "), state.Launcher,
+ state.Command)
+ } else {
+ _, _ = fmt.Fprintf(stdout, "\t%d\t%s\n",
+ state.PID, state.Argv)
+ }
+ }
+ if err = stdout.Flush(); err != nil {
+ fmt.Println("warn: error formatting output:", err)
}
os.Exit(0)
@@ -58,10 +88,11 @@ func Early() {
func SaveProcess(uid string, cmd *exec.Cmd) error {
statePath = path.Join(system.V.RunDir, uid, strconv.Itoa(cmd.Process.Pid))
state := launcherState{
- PID: cmd.Process.Pid,
- Launcher: cmd.Path,
- Argv: cmd.Args,
- Command: command,
+ PID: cmd.Process.Pid,
+ Launcher: cmd.Path,
+ Argv: cmd.Args,
+ Command: command,
+ Capability: *enablements,
}
if err := os.Mkdir(path.Join(system.V.RunDir, uid), 0700); err != nil && !errors.Is(err, fs.ErrExist) {
@@ -81,10 +112,10 @@ func SaveProcess(uid string, cmd *exec.Cmd) error {
}
}
-func readLaunchers() ([]*launcherState, error) {
+func readLaunchers(uid string) ([]*launcherState, error) {
var f *os.File
var r []*launcherState
- launcherPrefix := path.Join(system.V.RunDir, u.Uid)
+ launcherPrefix := path.Join(system.V.RunDir, uid)
if pl, err := os.ReadDir(launcherPrefix); err != nil {
return nil, err