From nobody Mon Apr 6 16:52:19 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fqFjw0ldHz6YKxw for ; Mon, 06 Apr 2026 16:52:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fqFjv5xmFz442Y for ; Mon, 06 Apr 2026 16:52:19 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775494339; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=a4xyDRc+erKSHvek/qncgl7B5IZV4RBvhRPqvtp/SJc=; b=S/TW3OrzgUYcEgwVNdpcQ4gKNJqY9IA2JrlUwqrN6Fdyg+yfhGZfEskn6Vbg7FtrTlExoh dMezSa3pHLHBmPSXVYVuYgrfkVu8OnGKyoqASUXSkvxBWN4KGdx/1GhnD+RN3I925hzv5u PuSmcDi2tNQb+qvlK8+DkCqkuGlhJGGWqqRuQfb5Nuqqs7ePb9jE0p9OaP005EossyyK+J QUL2O62c5e5F1DaNkU+ZxY88ntfMJCAjXJbqaNCCewWbzQABc146krhX+z/IA2DZz11Oss tLi6HX730SmlP/4XPIR5dtNOGtHOy1D7MvupLSAKc5c19QNnWKzolPi7GNfklA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775494339; a=rsa-sha256; cv=none; b=GA7UJ52Y0JzqDUZASq44W35XVNtWBQ54gksKoctpVxxtsNp1oU9o0OxhpPKsfgWP1JV/PS kFtG2AxkaYlEIYbLdVarlh8//cS1VErB4jc2uvuCrX2t168PDF6/3uI4vaPWH1RAF8o5iE OhReepHZ6LMCC+JAZ7DUYpySrqsPNBgvzU5wI0BwaJ+QhMv1VYyVQflz8IMYIp8HHIY+Sp odBrjRbDJwMjn/ZA6A+AfYT/cBwPEnAnWDjtV4COZQwqUeCdQWPrMrVNvjn3ctI1h+qtfF FwCCqSUKKLVT5lHH9Ub86m8+miHUayRSW/BFykarPFQW0vSa3+Mcluq7eIZZng== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775494339; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=a4xyDRc+erKSHvek/qncgl7B5IZV4RBvhRPqvtp/SJc=; b=b48gKLA1/2ChzKgB46NcKeAgUw9J8OaxkacBH4GCWBQHAiSSjKz6NcTvNDpzFxmhkYwZeW +SUUWRDcbPhjRSk5bDOGjwuHLnoH2m8DEAHZjw/xQxU8lAhsn298UTuu7NYvhaDBJZ6BIF QYwTIha56ds7KIwrJkzNrXNAJ2KaOTIH/NliRrJt8yashiEBFhVSjpnuVJaVO5ap9QQL9u ugzNlM5BF1EYxVhjQ5qM5SJefDwqfvVZk5luM3J56CRFkTEasnX8DC0/cdfc28Gg1ccVan YFzvkNcJdU4vcyEv1pGKweMTdCIKHRLy8qgaxPZTxzUOj6bRgvlXXUogFOmefQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fqFjv5W4Pz11yV for ; Mon, 06 Apr 2026 16:52:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 19c44 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 06 Apr 2026 16:52:19 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Baptiste Daroussin Subject: git: 8cc85a87510a - stable/15 - diff: prefer posix_spawn over pdfork/execl List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 8cc85a87510a56afee49a3f5d153ab0328b676d7 Auto-Submitted: auto-generated Date: Mon, 06 Apr 2026 16:52:19 +0000 Message-Id: <69d3e4c3.19c44.118041d6@gitrepo.freebsd.org> The branch stable/15 has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=8cc85a87510a56afee49a3f5d153ab0328b676d7 commit 8cc85a87510a56afee49a3f5d153ab0328b676d7 Author: Baptiste Daroussin AuthorDate: 2026-03-25 10:22:02 +0000 Commit: Baptiste Daroussin CommitDate: 2026-04-06 16:51:46 +0000 diff: prefer posix_spawn over pdfork/execl MFC After: 1 week Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D56076 (cherry picked from commit 6d8b2ac449f34423be9d56492022421db61d920e) --- usr.bin/diff/pr.c | 62 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/usr.bin/diff/pr.c b/usr.bin/diff/pr.c index 189e6b34649e..51cf2c765283 100644 --- a/usr.bin/diff/pr.c +++ b/usr.bin/diff/pr.c @@ -29,8 +29,10 @@ #include #include +#include #include #include +#include #include #include #include @@ -41,6 +43,8 @@ #define _PATH_PR "/usr/bin/pr" +extern char **environ; + struct pr * start_pr(char *file1, char *file2) { @@ -48,6 +52,9 @@ start_pr(char *file1, char *file2) pid_t pid; char *header; struct pr *pr; + posix_spawn_file_actions_t fa; + posix_spawnattr_t sa; + int error; pr = xcalloc(1, sizeof(*pr)); @@ -56,32 +63,41 @@ start_pr(char *file1, char *file2) fflush(stdout); if (pipe(pfd) == -1) err(2, "pipe"); - switch ((pid = pdfork(&pr->procd, PD_CLOEXEC))) { - case -1: - err(2, "No more processes"); - case 0: - /* child */ - if (pfd[0] != STDIN_FILENO) { - dup2(pfd[0], STDIN_FILENO); - close(pfd[0]); + + if ((error = posix_spawnattr_init(&sa)) != 0) + errc(2, error, "posix_spawnattr_init"); + if ((error = posix_spawn_file_actions_init(&fa)) != 0) + errc(2, error, "posix_spawn_file_actions_init"); + + posix_spawnattr_setprocdescp_np(&sa, &pr->procd, 0); + + if (pfd[0] != STDIN_FILENO) { + posix_spawn_file_actions_adddup2(&fa, pfd[0], STDIN_FILENO); + posix_spawn_file_actions_addclose(&fa, pfd[0]); + } + posix_spawn_file_actions_addclose(&fa, pfd[1]); + + char *argv[] = { __DECONST(char *, _PATH_PR), + __DECONST(char *, "-h"), header, NULL }; + error = posix_spawn(&pid, _PATH_PR, &fa, &sa, argv, environ); + if (error != 0) + errc(2, error, "could not spawn pr"); + + posix_spawn_file_actions_destroy(&fa); + posix_spawnattr_destroy(&sa); + + /* parent */ + if (pfd[1] == STDOUT_FILENO) { + pr->ostdout = STDOUT_FILENO; + } else { + if ((pr->ostdout = dup(STDOUT_FILENO)) < 0 || + dup2(pfd[1], STDOUT_FILENO) < 0) { + err(2, "stdout"); } close(pfd[1]); - execl(_PATH_PR, _PATH_PR, "-h", header, (char *)0); - _exit(127); - default: - /* parent */ - if (pfd[1] == STDOUT_FILENO) { - pr->ostdout = STDOUT_FILENO; - } else { - if ((pr->ostdout = dup(STDOUT_FILENO)) < 0 || - dup2(pfd[1], STDOUT_FILENO) < 0) { - err(2, "stdout"); - } - close(pfd[1]); - } - close(pfd[0]); - free(header); } + close(pfd[0]); + free(header); return (pr); }