diff options
| author | Paul Buetow <paul@buetow.org> | 2025-03-22 21:30:37 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-03-22 21:30:37 +0200 |
| commit | ba78b68ab19cce32d1558f142e145053082935a1 (patch) | |
| tree | d7d470752f9930b7c2a87f0af37cdac9d63cae81 /internal/eventloop.go | |
| parent | 935fb078d056b87485c21a2f6d9d9a37f4322200 (diff) | |
initial golang impl of fcntl
Diffstat (limited to 'internal/eventloop.go')
| -rw-r--r-- | internal/eventloop.go | 20 |
1 files changed, 19 insertions, 1 deletions
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)) |
