diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-03-17 01:09:12 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-03-17 01:10:27 +0900 |
| commit | ee108603572101ad3c285830e04ee248916b6c5d (patch) | |
| tree | e3d2274301cf7f1ed39df9c510672745fbe0b08a /seccomp/output.go | |
| parent | 44277dc0f1fd1806f5ceea34246a4c805a06b61b (diff) | |
seccomp: install output atomically
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'seccomp/output.go')
| -rw-r--r-- | seccomp/output.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/seccomp/output.go b/seccomp/output.go new file mode 100644 index 00000000..d583c9ee --- /dev/null +++ b/seccomp/output.go @@ -0,0 +1,30 @@ +package seccomp + +import "C" +import "sync/atomic" + +var printlnP atomic.Pointer[func(v ...any)] + +func SetOutput(f func(v ...any)) { + if f == nil { + // avoid storing nil function + printlnP.Store(nil) + } else { + printlnP.Store(&f) + } +} + +func GetOutput() func(v ...any) { + if fp := printlnP.Load(); fp == nil { + return nil + } else { + return *fp + } +} + +//export F_println +func F_println(v *C.char) { + if fp := printlnP.Load(); fp != nil { + (*fp)(C.GoString(v)) + } +} |
