aboutsummaryrefslogtreecommitdiffhomepage
path: root/sandbox/wl/wl.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-03-25 05:26:37 +0900
committerOphestra <cat@gensokyo.uk>2025-03-25 05:26:37 +0900
commit61dbfeffe77df9c1a11413b3cb8954933e79b45f (patch)
tree7f7f6bde9a8662848ad9392621316cbbc454a9f0 /sandbox/wl/wl.go
parent532feb4bfaa84a57dc8de97f36b13a89610a0584 (diff)
sandbox/wl: move into sandbox
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'sandbox/wl/wl.go')
-rw-r--r--sandbox/wl/wl.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/sandbox/wl/wl.go b/sandbox/wl/wl.go
new file mode 100644
index 00000000..f75f063d
--- /dev/null
+++ b/sandbox/wl/wl.go
@@ -0,0 +1,36 @@
+package wl
+
+//go:generate sh -c "wayland-scanner client-header `pkg-config --variable=datarootdir wayland-protocols`/wayland-protocols/staging/security-context/security-context-v1.xml security-context-v1-protocol.h"
+//go:generate sh -c "wayland-scanner private-code `pkg-config --variable=datarootdir wayland-protocols`/wayland-protocols/staging/security-context/security-context-v1.xml security-context-v1-protocol.c"
+
+/*
+#cgo linux pkg-config: --static wayland-client
+#cgo freebsd openbsd LDFLAGS: -lwayland-client
+
+#include "wayland-bind.h"
+*/
+import "C"
+import (
+ "errors"
+ "strings"
+)
+
+var (
+ ErrContainsNull = errors.New("string contains null character")
+)
+
+var resErr = [...]error{
+ 0: nil,
+ 1: errors.New("wl_display_connect_to_fd() failed"),
+ 2: errors.New("wp_security_context_v1 not available"),
+}
+
+func bindWaylandFd(socketPath string, fd uintptr, appID, instanceID string, syncFd uintptr) error {
+ if hasNull(appID) || hasNull(instanceID) {
+ return ErrContainsNull
+ }
+ res := C.f_bind_wayland_fd(C.CString(socketPath), C.int(fd), C.CString(appID), C.CString(instanceID), C.int(syncFd))
+ return resErr[int32(res)]
+}
+
+func hasNull(s string) bool { return strings.IndexByte(s, '\x00') > -1 }