diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-02 07:40:02 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-02 07:40:02 +0200 |
| commit | e5409861c00e4334baa9ba75b277332ec14089ed (patch) | |
| tree | bda143d34d039bf14266ae659d6f391c7e8b89c1 /internal/eventloop.go | |
| parent | 73652016579518ddc3524d42b345e7c566a7f5fc (diff) | |
Extract shared fd duplication helper
Diffstat (limited to 'internal/eventloop.go')
| -rw-r--r-- | internal/eventloop.go | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go index a33ebbb..41ab48b 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -580,9 +580,7 @@ func (e *eventLoop) handleFdExit(ep *event.Pair, fdEv *FdEvent) bool { return false } // Duplicating fd - if newFd := int32(retEvent.Ret); newFd != -1 { - e.fdState().set(newFd, fdFile.Dup(newFd)) - } + e.registerDup(fdFile, int32(retEvent.Ret), 0) } if ep.Is(SYS_ENTER_PIDFD_GETFD) { retEv, ok := ep.ExitEv.(*RetEvent) @@ -625,11 +623,7 @@ func (e *eventLoop) handleDup3Exit(ep *event.Pair, dup3Ev *Dup3Event) bool { e.recyclePair(ep, "Dropped malformed dup3 exit event") return false } - if newFd := int32(retEvent.Ret); newFd != -1 { - duppedFdFile := fdFile.Dup(newFd) - duppedFdFile.AddFlags(dup3Ev.Flags & syscall.O_CLOEXEC) - e.fdState().set(newFd, duppedFdFile) - } + e.registerDup(fdFile, int32(retEvent.Ret), dup3Ev.Flags&syscall.O_CLOEXEC) return true } @@ -734,17 +728,24 @@ func (e *eventLoop) handleFcntlExit(ep *event.Pair, fcntlEv *FcntlEvent) bool { ep.File = fdFile e.fdState().set(fd, fdFile) case syscall.F_DUPFD: - newFd := int32(retEvent.Ret) - e.fdState().set(newFd, fdFile.Dup(newFd)) + e.registerDup(fdFile, int32(retEvent.Ret), 0) case syscall.F_DUPFD_CLOEXEC: - newFd := int32(retEvent.Ret) - duppedFdFile := fdFile.Dup(newFd) - duppedFdFile.AddFlags(syscall.O_CLOEXEC) - e.fdState().set(newFd, duppedFdFile) + e.registerDup(fdFile, int32(retEvent.Ret), syscall.O_CLOEXEC) } return true } +func (e *eventLoop) registerDup(fdFile file.FdFile, newFd int32, extraFlags int32) { + if newFd < 0 { + return + } + duppedFdFile := fdFile.Dup(newFd) + if extraFlags != 0 { + duppedFdFile.AddFlags(extraFlags) + } + e.fdState().set(newFd, duppedFdFile) +} + func (e *eventLoop) recyclePair(ep *event.Pair, warning string) { e.notifyWarning(warning) ep.Recycle() |
