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;

Reply via email to