From ba78b68ab19cce32d1558f142e145053082935a1 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 22 Mar 2025 21:30:37 +0200 Subject: initial golang impl of fcntl --- internal/eventloop.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'internal/eventloop.go') diff --git a/internal/eventloop.go b/internal/eventloop.go index 555a8f8..c9797b2 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -104,6 +104,9 @@ func (e *eventLoop) events(ctx context.Context, rawCh <-chan []byte) <-chan *eve for { select { case raw := <-rawCh: + if len(raw) == 0 { + continue + } e.processRawEvent(raw, ch) default: select { @@ -144,6 +147,8 @@ func (e *eventLoop) processRawEvent(raw []byte, ch chan<- *event.Pair) { if ev, ok := e.filter.pathEvent(NewPathEvent(raw)); ok { e.syscallEnter(ev) } + case ENTER_FCNTL_EVENT: + e.syscallEnter(NewFcntlEvent(raw)) default: panic(fmt.Sprintf("unhandled event type %v: %v", EventType(raw[0]), raw)) } @@ -217,7 +222,7 @@ func (e *eventLoop) syscallExit(exitEv event.Event, ch chan<- *event.Pair) { delete(e.files, fd) } } else { - ev.File = file.NewFdWithPid(fd, ev.EnterEv.(*FdEvent).Pid) + ev.File = file.NewFdWithPid(fd, v.Pid) } ev.Comm = e.comm(ev.EnterEv.GetTid()) if !e.filter.eventPair(ev) { @@ -230,6 +235,19 @@ func (e *eventLoop) syscallExit(exitEv event.Event, ch chan<- *event.Pair) { ev.Recycle() return } + case *FcntlEvent: + ev.Comm = e.comm(ev.EnterEv.GetTid()) + if !e.filter.eventPair(ev) { + ev.Recycle() + return + } + fd := int32(v.Fd) + if file_, ok := e.files[fd]; ok { + ev.File = file_ + } else { + ev.File = file.NewFdWithPid(fd, v.Pid) + } + // TODO: Implement more details here (e.g. changing the file open flags) default: panic(fmt.Sprintf("unknown type: %v", v)) -- cgit v1.2.3