From nobody Mon Apr 06 16:52:18 2026 X-Original-To: dev-commits-src-branches@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 4fqFjv1R2Zz6YLVC for ; Mon, 06 Apr 2026 16:52:19 +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 4fqFjt5bTPz43nn for ; Mon, 06 Apr 2026 16:52:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775494338; 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=HxOl2+6EbRKWXq4doNEZPoGoVioYwA3A+2Fd0NqzPiU=; b=DOBs4mfF1LVJZ0/Wnk/SUmPidqfJL3ZrLMKXZHxR3yxKKfX28EvQi4vj3gXEOqH2brfweO TLYPecesS+1AA7mFTOoU1y57CoQ5xnco/HDZ0vd1EVO5D5IuUTO8sxfsdLNSKDWD/RACM4 y46qLVy+X8uEsMsBuNkUGIXLpcTYiViafyctNruI45MMjnBLCKWP3vbW/o1xwoUARnjRQr ry5PPrlMg0r5lmyGQSTRIlND1A77ErIJkty/G3Om396XrxaHzVwUK6qn4/xstIUtuORaCA DKPuh5OOfATmJJGJDEKBiEfGBPTrdZGqY8vLUPs+jXhDF4NZngaSl9y1H8+2sQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775494338; a=rsa-sha256; cv=none; b=RW9u/pfTpSdvv+NGRctXSuwW+sacs8QTg0xVx2Qf6B5YvNFNK4QHRVKaKiGGszn69VyggW ziWqA91KesFUgLm/iPVA6Ry+qs2FzJzagqCoVN0r8dL9/VSt1dsDB6AIbkhjwYvjtFeyC0 N2JlPgvnRg5CcQNOtzb8OpfTh8J6sj30QxYpUKqFY0vBEaQAZ+vvfHyBJElQ2NqxjuULRy wrYpkAuqwNEVTRdx4e/Daznlhr/zQBt1PPlPfEst3hfyNRxsV7qyfS98scioSQjv6fe/6a EUv6Mw4Hzs0MV36fsY04oPRdR5F+VDl2NbEFxkDmCoZHe4Nk+HzzIxg2N3ZrTQ== 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=1775494338; 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=HxOl2+6EbRKWXq4doNEZPoGoVioYwA3A+2Fd0NqzPiU=; b=QvsYUSjJTNpuevjpUBcKH6rNmLLzHH4DYzB68svq+JLCV+TmiXK8WHtD1+4fDp7Zq4wPTg iGbuae4FQhH1f9BVvnaEYNiGE9eS8QLJZGzx2SeHSi92JaYxq3mIU7wD74zkvPkpKD0CLQ dY5B8oQVGIp0bF8ul8peaz85C50G2W4PE5377lCvszJuBriFibwdJhyS1KLs7ImKot01fw 8ID/CCw/3gutFlqON+HCLdgI69tZ3hcsduqlmQd8kEssW/OwaEowK0WgH+hJkA6LjVZwYH /RqKehcGtWYj5PN4W6+v/formUnOzkomrAJ/B+SVYN+626x2YUmr0DDPO2ZBZQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fqFjt4k2rz11N6 for ; Mon, 06 Apr 2026 16:52:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1be1e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 06 Apr 2026 16:52:18 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Baptiste Daroussin Subject: git: 210f4d82757b - stable/15 - diff3: prefer posix_spawn over pdfork/execlp List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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: 210f4d82757b0a0ed273987ee2c2ef69ef23a398 Auto-Submitted: auto-generated Date: Mon, 06 Apr 2026 16:52:18 +0000 Message-Id: <69d3e4c2.1be1e.42e73456@gitrepo.freebsd.org> The branch stable/15 has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=210f4d82757b0a0ed273987ee2c2ef69ef23a398 commit 210f4d82757b0a0ed273987ee2c2ef69ef23a398 Author: Baptiste Daroussin AuthorDate: 2026-03-25 10:08:58 +0000 Commit: Baptiste Daroussin CommitDate: 2026-04-06 16:51:45 +0000 diff3: prefer posix_spawn over pdfork/execlp MFC After: 1 week Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D56075 (cherry picked from commit 5f7f0efe8e13247fc80a2a739e757f73a5d7ebda) --- usr.bin/diff3/diff3.c | 49 ++++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/usr.bin/diff3/diff3.c b/usr.bin/diff3/diff3.c index d85a5da94b10..75e8c6297855 100644 --- a/usr.bin/diff3/diff3.c +++ b/usr.bin/diff3/diff3.c @@ -73,14 +73,17 @@ #include #include #include +#include #include #include #include +#include #include #include #include #include +extern char **environ; /* * "from" is first in range of changed lines; "to" is last+1 * from=to=line after point of insertion for added lines. @@ -301,23 +304,30 @@ readin(int fd, struct diff **dd) } static int -diffexec(const char *diffprog, char **diffargv, int fd[]) +diffexec(char **diffargv, int fd[]) { - int pd; - - switch (pdfork(&pd, PD_CLOEXEC)) { - case 0: - close(fd[0]); - if (dup2(fd[1], STDOUT_FILENO) == -1) - err(2, "child could not duplicate descriptor"); - close(fd[1]); - execvp(diffprog, diffargv); - err(2, "could not execute diff: %s", diffprog); - break; - case -1: - err(2, "could not fork"); - break; - } + posix_spawnattr_t sa; + posix_spawn_file_actions_t fa; + pid_t pid; + int pd, error; + + 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, &pd, 0); + + posix_spawn_file_actions_addclose(&fa, fd[0]); + posix_spawn_file_actions_adddup2(&fa, fd[1], STDOUT_FILENO); + posix_spawn_file_actions_addclose(&fa, fd[1]); + + error = posix_spawn(&pid, diffargv[0], &fa, &sa, diffargv, environ); + if (error != 0) + errc(2, error, "could not spawn diff"); + + posix_spawn_file_actions_destroy(&fa); + posix_spawnattr_destroy(&sa); close(fd[1]); return (pd); } @@ -1004,7 +1014,7 @@ main(int argc, char **argv) eflag = EFLAG_OVERLAP; break; case DIFFPROG_OPT: - diffprog = optarg; + diffargv[0] = optarg; break; case STRIPCR_OPT: strip_cr = 1; @@ -1079,13 +1089,14 @@ main(int argc, char **argv) if (pipe(fd23)) err(2, "pipe"); + diffargv[diffargc] = file1; diffargv[diffargc + 1] = file3; diffargv[diffargc + 2] = NULL; - pd13 = diffexec(diffprog, diffargv, fd13); + pd13 = diffexec(diffargv, fd13); diffargv[diffargc] = file2; - pd23 = diffexec(diffprog, diffargv, fd23); + pd23 = diffexec(diffargv, fd23); caph_cache_catpages(); if (caph_enter() < 0)