Here's an update to the latest release.
I'd also like to take MAINTAINER.
ok?
Index: Makefile
===================================================================
RCS file: /cvs/ports/wayland/mango/Makefile,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 Makefile
--- Makefile 6 Apr 2026 19:19:57 -0000 1.1.1.1
+++ Makefile 3 May 2026 18:12:14 -0000
@@ -1,12 +1,14 @@
COMMENT = lightweight, high-performance Wayland compositor
-V = 0.12.8
-
+V = 0.12.9
+PKGNAME = mango-${V}
DIST_TUPLE= github mangowm mango ${V} .
CATEGORIES = wayland
HOMEPAGE = https://mangowm.github.io/
+
+MAINTAINER = Volker Schlecht <[email protected]>
# GPLv3
PERMIT_PACKAGE = Yes
Index: distinfo
===================================================================
RCS file: /cvs/ports/wayland/mango/distinfo,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 distinfo
--- distinfo 6 Apr 2026 19:19:57 -0000 1.1.1.1
+++ distinfo 3 May 2026 18:12:14 -0000
@@ -1,2 +1,2 @@
-SHA256 (mangowm-mango-0.12.8.tar.gz) = m3e0icJnk4Bp26BZ8BMFZw6qWEOf6VSGqmGLZFXpYcE=
-SIZE (mangowm-mango-0.12.8.tar.gz) = 446765
+SHA256 (mangowm-mango-0.12.9.tar.gz) = k3KW4QTepnM+Gh8uVHSQD9K7U2quwHNbE1peUkMCdwo=
+SIZE (mangowm-mango-0.12.9.tar.gz) = 450474
Index: patches/patch-src_dispatch_bind_define_h
===================================================================
RCS file: /cvs/ports/wayland/mango/patches/patch-src_dispatch_bind_define_h,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 patch-src_dispatch_bind_define_h
--- patches/patch-src_dispatch_bind_define_h 6 Apr 2026 19:19:57 -0000 1.1.1.1
+++ patches/patch-src_dispatch_bind_define_h 3 May 2026 18:12:14 -0000
@@ -1,27 +1,62 @@
Index: src/dispatch/bind_define.h
--- src/dispatch/bind_define.h.orig
+++ src/dispatch/bind_define.h
-@@ -881,6 +881,7 @@ int32_t spawn(const Arg *arg) {
- int32_t argc = 0;
- char *token = strtok((char *)arg->v, " ");
- while (token != NULL && argc < 63) {
-+ #ifndef __OpenBSD__
- wordexp_t p;
- if (wordexp(token, &p, 0) == 0) {
- argv[argc++] = p.we_wordv[0];
-@@ -888,6 +889,15 @@ int32_t spawn(const Arg *arg) {
- argv[argc++] = token;
- }
- token = strtok(NULL, " ");
-+ #else
+@@ -1,3 +1,7 @@
++#ifdef __OpenBSD__
++#define SPAWN_MAX_ARGS 64
++#endif
++
+ int32_t bind_to_view(const Arg *arg) {
+ if (!selmon)
+ return 0;
+@@ -875,6 +879,7 @@ int32_t spawn(const Arg *arg) {
+ dup2(STDERR_FILENO, STDOUT_FILENO);
+ setsid();
+
++#ifndef __OpenBSD__
+ // 2. 对整个参数字符串进行单词展开
+ wordexp_t p;
+ if (wordexp(arg->v, &p, 0) != 0) {
+@@ -889,6 +894,42 @@ int32_t spawn(const Arg *arg) {
+ wlr_log(WLR_DEBUG, "mango: execvp '%s' failed: %s\n", p.we_wordv[0],
+ strerror(errno));
+ wordfree(&p); // 释放 wordexp 分配的内存
++#else
++ int argc = 0;
++ char *last;
++ char *argv[SPAWN_MAX_ARGS];
++
++ char *token = strtok_r((char *)arg->v, " ", &last);
++
++ while (token != NULL && argc < SPAWN_MAX_ARGS - 1) {
+ glob_t p;
-+ if (glob(token, GLOB_DOOFFS, NULL, &p) == 0) {
-+ argv[argc++] = p.gl_pathv[0];
++ if (glob(token, GLOB_DOOFFS, NULL, &p) == 0 && p.gl_pathc > 0) {
++ argv[argc] = strdup(p.gl_pathv[0]);
++ globfree(&p);
+ } else {
-+ argv[argc++] = token;
++ argv[argc] = strdup(token);
+ }
-+ token = strtok(NULL, " ");
-+ #endif
- }
- argv[argc] = NULL;
-
++ argc++;
++ token = strtok_r(NULL, " ", &last);
++ }
++
++ if (argc == 0) {
++ return 0;
++ }
++
++ argv[argc] = NULL;
++
++ execvp(argv[0], argv);
++
++ wlr_log(WLR_ERROR, "mango: execvp '%s' failed: %s\n",
++ argv[0] ? argv[0] : "NULL", strerror(errno));
++
++ /* Cleanup */
++ for (int i = 0; i < argc; i++) {
++ free(argv[i]);
++ }
++
++#endif
+ _exit(EXIT_FAILURE);
+ }
+ return 0;