diff options
| author | Paul Buetow <paul@buetow.org> | 2025-03-27 23:01:31 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-03-27 23:01:31 +0200 |
| commit | c025acbea84bdc5701d26b60504392dcffd8324b (patch) | |
| tree | 8f75aaf689ef41d1708654baac17a96acbb054b8 /internal/eventloop.go | |
| parent | 4d84ceb78563d5b750bf3bb98040b8da07e8554a (diff) | |
implemented dup
Diffstat (limited to 'internal/eventloop.go')
| -rw-r--r-- | internal/eventloop.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go index bb30764..3355c8b 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -198,6 +198,7 @@ func (e *eventLoop) syscallExit(exitEv event.Event, ch chan<- *event.Pair) { return } + // TODO: Benchmark, is a map faster than this large switch statement? switch v := ev.EnterEv.(type) { case *OpenEvent: openEv := ev.EnterEv.(*OpenEvent) @@ -240,6 +241,15 @@ func (e *eventLoop) syscallExit(exitEv event.Event, ch chan<- *event.Pair) { ev.Recycle() return } + if ev.Is(SYS_ENTER_DUP) { + fdFile, ok := ev.File.(file.FdFile) + if !ok { + panic("expected a file.FdFile") + } + // Duplicating fd + newFd := int32(ev.ExitEv.(*RetEvent).Ret) + e.files[newFd] = fdFile.Dup(newFd) + } case *NullEvent: ev.Comm = e.comm(ev.EnterEv.GetTid()) |
