summaryrefslogtreecommitdiff
path: root/internal/eventloop.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-03-27 23:01:31 +0200
committerPaul Buetow <paul@buetow.org>2025-03-27 23:01:31 +0200
commitc025acbea84bdc5701d26b60504392dcffd8324b (patch)
tree8f75aaf689ef41d1708654baac17a96acbb054b8 /internal/eventloop.go
parent4d84ceb78563d5b750bf3bb98040b8da07e8554a (diff)
implemented dup
Diffstat (limited to 'internal/eventloop.go')
-rw-r--r--internal/eventloop.go10
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())