From dcb120befa13c275d0fdabe694fcfeaf3d17dca9 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 16 Mar 2025 21:31:14 +0200 Subject: printing out file flags in human mode... only open syscalls yet --- internal/file/flags.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'internal/file/flags.go') diff --git a/internal/file/flags.go b/internal/file/flags.go index fcba927..3589833 100644 --- a/internal/file/flags.go +++ b/internal/file/flags.go @@ -5,6 +5,11 @@ import ( "syscall" ) +// TODO: syscalls fcntl and dup3 and many more can also manipulate open flags +// Check the tracepoint formates for 'flags' +// Maybe need new BPF type and pass through the ring +var flagsToHumanCache = map[int32]string{-1: "O_?"} + var flagsToHuman = map[int]string{ syscall.O_ACCMODE: "O_ACCMODE", syscall.O_APPEND: "O_APPEND", @@ -26,11 +31,16 @@ var flagsToHuman = map[int]string{ syscall.O_WRONLY: "O_WRONLY", } -func FlagsToStr(flags int32) string { - return strings.Join(FlagsToStrs(flags), "|") +func flagsToStr(flags int32) string { + if str, ok := flagsToHumanCache[flags]; ok { + return str + } + str := strings.Join(flagsToStrs(flags), "|") + flagsToHumanCache[flags] = str + return str } -func FlagsToStrs(flags int32) (result []string) { +func flagsToStrs(flags int32) (result []string) { for flag, name := range flagsToHuman { if int(flags)&flag == flag { result = append(result, name) -- cgit v1.2.3