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 # 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;