From nobody Wed Jun 24 17:01:29 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 4glpB70zZvz6jVPN for ; Wed, 24 Jun 2026 17:01:35 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4glpB66XVmz3S8l for ; Wed, 24 Jun 2026 17:01:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782320494; 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=k/Z0hQhkg2erbrQYpi3K91wjXvxKv5WluR/pfF5zn70=; b=ETlS8WJ7qT93jeENbPlb7cwG3iCBsv6gk44OYuJXJdPlQCqtAsDmj9fkFNWlgL/+eaNeP3 VraVLWMW73c5XqcO8I6cZXAwWm+aROlBrWrbVk26wFMgc31eb5eqe036Ia1pJOHd7oMEG6 opr9gNUAV4zYxHbPHUMBgwiQGuBovTkkWmDqa7sN3gW7CEwcVT3l/sbSZDVbcqZKGaBqPZ DkkDgl+CjPG6kUYkA+oIfH/wRkpLBBMaL3D37t94xxxJOb+n9VTwlJ+9JxlCRHo2MqCUZX EKTTtzf8f454shGTSjt4lw4tXpTt+LxlRM9E1QYyxXJ7BBOCVeUSg6cZUQguHg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782320494; a=rsa-sha256; cv=none; b=ej2uNl/bOgwlFy8qhv4t95JGzordJ5g/jXf5JJOEHaXgkFRQmlcId8Qg8OXZcQWsRqC6US Xq8sTTqa4X1+vmcMjyPKqq/3L/vTGDM98ZWbl1bW7vTHgU3V18ocq4rCEWYaBk5UhA9/bO DHP7Ep2+m0mBIdWIS+V/bO6kgcgb1RHKUWj7dVj01xnJyhMiodtgjrmyuiFurx4THzHY6d /AKJbN/dCc19QA/w5q3ZuPeITAhQH242A8ibXGnphyid6TkA60SFxL5jd6ve9qwc1WpnaG NiaomGuWvdiJeZPtJ65GVoGbNLMWUtx7mO/230LfM9MBaXbcXG1vgJzPAVgmkQ== 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=1782320494; 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=k/Z0hQhkg2erbrQYpi3K91wjXvxKv5WluR/pfF5zn70=; b=XnS4v57yAxQ7l6qDdlSOP99APMkcZE4n4rwRAjUeHuS1wnClrWzoRmgHfXmNXlE4DUBC8w EE/OSkocNqx0o0mIFUC1v/b6s5D9+d4uZxpLSt13mSWfsQ5rtj7uO+4sPK29j9KUaA8xEy RhmUbWj356YWrcBTElmWIUqAtmkDTxOj0h1XJlA3l2doj5E2Q8IwlwZ4MXyQ+IeLOBzf+k By4KJHVjg6reSyefGCGrDOJNVihrcc18ZmORAjB7xRnRafBSs6OL6NNpJdcZHDybB80GPD WMBqiR3LrYRazBNrW4MEYa1eHH3w11+uHPMtgp9PxBRx4qAaLOyHkx9EqS6t/Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4glpB65BdZzCXm for ; Wed, 24 Jun 2026 17:01:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 33e19 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 24 Jun 2026 17:01:29 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alan Somers Subject: git: bd1c0ff49c48 - main - Revert "fts: refactor to use fd-relative operations internally" 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: asomers X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bd1c0ff49c48950dbd999c024a17199022f81d36 Auto-Submitted: auto-generated Date: Wed, 24 Jun 2026 17:01:29 +0000 Message-Id: <6a3c0d69.33e19.361a7b52@gitrepo.freebsd.org> The branch main has been updated by asomers: URL: https://cgit.FreeBSD.org/src/commit/?id=bd1c0ff49c48950dbd999c024a17199022f81d36 commit bd1c0ff49c48950dbd999c024a17199022f81d36 Author: Alan Somers AuthorDate: 2026-06-24 16:56:50 +0000 Commit: Alan Somers CommitDate: 2026-06-24 17:00:04 +0000 Revert "fts: refactor to use fd-relative operations internally" This reverts commit e03ed9daeb49fffa1d16b8d00240c65e92650d01. The change to the size of struct FTSENT is breaking backwards compatibility for some binaries. Jitendra is working on a new version that will move the new field into a private struct. Reported by: bdrewery Fixes: e03ed9daeb4 ("fts: refactor to use fd-relative operations") Sponsored by: ConnectWise --- include/fts.h | 1 - lib/libc/gen/fts.c | 38 +++++++++++--------------------------- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/include/fts.h b/include/fts.h index 716103189dca..479905bda463 100644 --- a/include/fts.h +++ b/include/fts.h @@ -133,7 +133,6 @@ struct _ftsent { struct stat *fts_statp; /* stat(2) information */ char *fts_name; /* file name */ FTS *fts_fts; /* back pointer to main FTS */ - int fts_dirfd; /* fd for parent directory */ }; #include diff --git a/lib/libc/gen/fts.c b/lib/libc/gen/fts.c index 90d5abc49e60..e8063ecb646e 100644 --- a/lib/libc/gen/fts.c +++ b/lib/libc/gen/fts.c @@ -67,7 +67,6 @@ static FTSENT *fts_build(FTS *, int); static void fts_lfree(FTSENT *); static void fts_load(FTS *, FTSENT *); static size_t fts_maxarglen(char * const *); -static FTS *__fts_open(FTS *, char * const *, int); static void fts_padjust(FTS *, FTSENT *); static int fts_palloc(FTS *, size_t); static FTSENT *fts_sort(FTS *, FTSENT *, size_t); @@ -130,7 +129,7 @@ static const char *ufslike_filesystems[] = { default: 0) static FTS * -__fts_open(FTS *sp, char * const *argv, int rootfd) +__fts_open(FTS *sp, char * const *argv) { FTSENT *p, *root; FTSENT *parent, *tmp; @@ -213,9 +212,9 @@ __fts_open(FTS *sp, char * const *argv, int rootfd) * descriptor we run anyway, just more slowly. */ if (!ISSET(FTS_NOCHDIR) && - (sp->fts_rfd = _openat(rootfd, ".", O_RDONLY | - O_CLOEXEC, 0)) < 0) + (sp->fts_rfd = _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0) SET(FTS_NOCHDIR); + return (sp); mem3: fts_lfree(root); @@ -251,7 +250,7 @@ fts_open(char * const *argv, int options, sp->fts_compar = compar; sp->fts_options = options; - return (__fts_open(sp, argv, AT_FDCWD)); + return (__fts_open(sp, argv)); } #ifdef __BLOCKS__ @@ -305,7 +304,7 @@ fts_open_b(char * const *argv, int options, fts_block compar) sp->fts_compar_b = compar; sp->fts_options = options | FTS_COMPAR_B; - if ((sp = __fts_open(sp, argv, AT_FDCWD)) == NULL) { + if ((sp = __fts_open(sp, argv)) == NULL) { #ifdef __BLOCKS__ Block_release(compar); #else @@ -357,8 +356,6 @@ fts_close(FTS *sp) p = p->fts_link != NULL ? p->fts_link : p->fts_parent; free(freep); } - if (p->fts_dirfd >= 0) - (void)_close(p->fts_dirfd); free(p); } @@ -442,9 +439,8 @@ fts_read(FTS *sp) (p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) { p->fts_info = fts_stat(sp, p, 1, -1); if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { - if ((p->fts_symfd = p->fts_dirfd >= 0 ? - _dup(p->fts_dirfd) : _openat(AT_FDCWD, ".", - O_RDONLY | O_CLOEXEC, 0)) < 0) { + if ((p->fts_symfd = _open(".", O_RDONLY | O_CLOEXEC, + 0)) < 0) { p->fts_errno = errno; p->fts_info = FTS_ERR; } else @@ -488,7 +484,7 @@ fts_read(FTS *sp) * FTS_STOP or the fts_info field of the node. */ if (sp->fts_child != NULL) { - if (fts_safe_changedir(sp, p, p->fts_dirfd, p->fts_name)) { + if (fts_safe_changedir(sp, p, -1, p->fts_accpath)) { p->fts_errno = errno; p->fts_flags |= FTS_DONTCHDIR; for (p = sp->fts_child; p != NULL; @@ -536,9 +532,7 @@ next: tmp = p; p->fts_info = fts_stat(sp, p, 1, -1); if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) { if ((p->fts_symfd = - p->fts_dirfd >= 0 ? - _dup(p->fts_dirfd) : _openat(AT_FDCWD, ".", - O_RDONLY | O_CLOEXEC, 0)) < 0) { + _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0) { p->fts_errno = errno; p->fts_info = FTS_ERR; } else @@ -564,8 +558,6 @@ name: t = sp->fts_path + NAPPEND(p->fts_parent); * can distinguish between error and EOF. */ free(tmp); - if (p->fts_dirfd >= 0) - (void)_close(p->fts_dirfd); free(p); errno = 0; return (sp->fts_cur = NULL); @@ -679,9 +671,7 @@ fts_children(FTS *sp, int instr) ISSET(FTS_NOCHDIR)) return (sp->fts_child = fts_build(sp, instr)); - if ((fd = sp->fts_cur->fts_dirfd >= 0 ? - _dup(sp->fts_cur->fts_dirfd) : _openat(AT_FDCWD, ".", - O_RDONLY | O_CLOEXEC, 0)) < 0) + if ((fd = _open(".", O_RDONLY | O_CLOEXEC, 0)) < 0) return (NULL); sp->fts_child = fts_build(sp, instr); serrno = (sp->fts_child == NULL) ? errno : 0; @@ -917,7 +907,6 @@ mem1: saved_errno = errno; } p->fts_level = level; - p->fts_dirfd = _dup(_dirfd(dirp)); p->fts_parent = sp->fts_cur; p->fts_pathlen = len + dnamlen; @@ -1196,7 +1185,6 @@ fts_alloc(FTS *sp, char *name, size_t namelen) return (NULL); p->fts_symfd = -1; - p->fts_dirfd = -1; p->fts_path = sp->fts_path; p->fts_name = (char *)(p + 1); p->fts_namelen = namelen; @@ -1217,8 +1205,6 @@ fts_lfree(FTSENT *head) /* Free a linked list of structures. */ while ((p = head)) { head = head->fts_link; - if (p->fts_dirfd >= 0) - (void)_close(p->fts_dirfd); free(p); } } @@ -1336,9 +1322,7 @@ fts_ufslinks(FTS *sp, const FTSENT *ent) * avoidance. */ if (priv->ftsp_dev != ent->fts_dev) { - if ((ent->fts_dirfd >= 0 ? - _fstatfs(ent->fts_dirfd, &priv->ftsp_statfs) : - statfs(ent->fts_path, &priv->ftsp_statfs)) != -1) { + if (statfs(ent->fts_path, &priv->ftsp_statfs) != -1) { priv->ftsp_dev = ent->fts_dev; priv->ftsp_linksreliable = 0; for (cpp = ufslike_filesystems; *cpp; cpp++) {