From a37893ed15b147b817db904d57adbfe68fe4c3b3 Mon Sep 17 00:00:00 2001 From: Sam James Date: Mon, 6 Apr 2026 00:25:53 +0100 Subject: [PATCH] dev-libs/boost: fix hang on unsigned char arches Bug: https://github.com/boostorg/process/issues/536 Bug: https://bugs.gentoo.org/969987 Signed-off-by: Sam James --- ...t-1.90.0.ebuild => boost-1.90.0-r1.ebuild} | 1 + .../boost-1.90.0-unsigned-char-EOF.patch | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+) rename dev-libs/boost/{boost-1.90.0.ebuild => boost-1.90.0-r1.ebuild} (99%) create mode 100644 dev-libs/boost/files/boost-1.90.0-unsigned-char-EOF.patch diff --git a/dev-libs/boost/boost-1.90.0.ebuild b/dev-libs/boost/boost-1.90.0-r1.ebuild similarity index 99% rename from dev-libs/boost/boost-1.90.0.ebuild rename to dev-libs/boost/boost-1.90.0-r1.ebuild index 04fd7db82e48e..d1d86e28fe416 100644 --- a/dev-libs/boost/boost-1.90.0.ebuild +++ b/dev-libs/boost/boost-1.90.0-r1.ebuild @@ -57,6 +57,7 @@ PATCHES=( "${FILESDIR}"/${PN}-1.89.0-python-exclude-broken-tests.patch "${FILESDIR}"/${PN}-1.89.0-unordered-no-tbb.patch "${FILESDIR}"/${PN}-1.90.0-msm-std.patch + "${FILESDIR}"/${PN}-1.90.0-unsigned-char-EOF.patch ) create_user-config.jam() { diff --git a/dev-libs/boost/files/boost-1.90.0-unsigned-char-EOF.patch b/dev-libs/boost/files/boost-1.90.0-unsigned-char-EOF.patch new file mode 100644 index 0000000000000..da89b4965a87c --- /dev/null +++ b/dev-libs/boost/files/boost-1.90.0-unsigned-char-EOF.patch @@ -0,0 +1,41 @@ +https://github.com/boostorg/process/issues/536 +--- a/libs/process/src/ext/cmd.cpp ++++ b/libs/process/src/ext/cmd.cpp +@@ -219,7 +219,7 @@ shell cmd(boost::process::v2::pid_type pid, error_code & ec) + procargs.resize(4096); + int f = ::open(("/proc/" + std::to_string(pid) + "/cmdline").c_str(), O_RDONLY); + +- while (procargs.back() != EOF) ++ while (procargs.back() != (char) EOF) + { + auto r = ::read(f, &*(procargs.end() - 4096), 4096); + if (r < 0) +@@ -237,7 +237,7 @@ shell cmd(boost::process::v2::pid_type pid, error_code & ec) + } + ::close(f); + +- if (procargs.back() == EOF) ++ if (procargs.back() == (char) EOF) + procargs.pop_back(); + + auto argc = std::count(procargs.begin(), procargs.end(), '\0'); +--- a/libs/process/src/ext/env.cpp ++++ b/libs/process/src/ext/env.cpp +@@ -127,7 +127,7 @@ native_env_iterator next(native_env_iterator nh) + } + native_env_iterator find_end(native_env_iterator nh) + { +- while (*nh != EOF) ++ while (*nh != (char) EOF) + nh ++; + return nh ; + } +@@ -318,7 +318,7 @@ env_view env(boost::process::v2::pid_type pid, error_code & ec) + + int f = ::open(("/proc/" + std::to_string(pid) + "/environ").c_str(), O_RDONLY); + +- while (!procargs || procargs.get()[size - 1] != EOF) ++ while (!procargs || procargs.get()[size - 1] != (char) EOF) + { + std::unique_ptr buf{new char[size + 4096]}; + if (size > 0)