From f10c96b8f445642fa58f25294e4a37376fe6ff64 Mon Sep 17 00:00:00 2001 From: Hraban Luyat Date: Fri, 10 Jul 2020 09:44:22 +0100 Subject: [PATCH] refactor: remove unnecessary callback passing Since we now have a full function wrapper for libopusfile init anyway we can directly pass the callback struct pointer from there, instead of making it go through Go first. --- callbacks.c | 8 +++----- stream.go | 5 ++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/callbacks.c b/callbacks.c index 5645f30..d966f8c 100644 --- a/callbacks.c +++ b/callbacks.c @@ -11,9 +11,7 @@ // Defined in Go. Uses the same signature as Go, no need for proxy function. int go_readcallback(void *p, unsigned char *buf, int nbytes); -// Allocated once, never moved. Pointer to this is safe for passing around -// between Go and C. -struct OpusFileCallbacks callbacks = { +static struct OpusFileCallbacks callbacks = { .read = go_readcallback, }; @@ -23,7 +21,7 @@ struct OpusFileCallbacks callbacks = { // we have this wrapper function to shush it. // https://groups.google.com/g/golang-nuts/c/995uZyRPKlU OggOpusFile * -my_open_callbacks(uintptr_t p, const OpusFileCallbacks *cb, int *error) +my_open_callbacks(uintptr_t p, int *error) { - return op_open_callbacks((void *)p, cb, NULL, 0, error); + return op_open_callbacks((void *)p, &callbacks, NULL, 0, error); } diff --git a/stream.go b/stream.go index 60f99e0..46e30fa 100644 --- a/stream.go +++ b/stream.go @@ -16,8 +16,7 @@ import ( #include #include -extern struct OpusFileCallbacks callbacks; -OggOpusFile *my_open_callbacks(uintptr_t p, const OpusFileCallbacks *cb, int *error); +OggOpusFile *my_open_callbacks(uintptr_t p, int *error); */ import "C" @@ -105,7 +104,7 @@ func (s *Stream) Init(read io.Reader) error { // called. streams.Save(s) defer streams.Del(s) - oggfile := C.my_open_callbacks(C.uintptr_t(s.id), &C.callbacks, &errno) + oggfile := C.my_open_callbacks(C.uintptr_t(s.id), &errno) if errno != 0 { return StreamError(errno) } -- 2.48.1