summaryrefslogtreecommitdiff
path: root/internal/file/flags.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/file/flags.go')
-rw-r--r--internal/file/flags.go16
1 files changed, 13 insertions, 3 deletions
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)