aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/grep/grep.c
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2024-09-04 19:53:17 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2024-09-04 19:53:17 +0000
commit77eb877714d69ee0279d70eb3331920fba90db95 (patch)
tree2fa5104807bcf22d4761bf9a6cc7ef3a3e7f5a37 /usr.bin/grep/grep.c
parenta8ddd1926a34fc20970d9ceaad71b31fc414b1c5 (diff)
downloadsrc-77eb877714d69ee0279d70eb3331920fba90db95.tar.gz
src-77eb877714d69ee0279d70eb3331920fba90db95.zip
grep: Fix various bugs in recursive tree handling
The -OpS options were effectively ignored due to a collection of bugs in the use of fts(3): - fts_open(3) requires one of FTS_PHYSICAL or FTS_LOGICAL to be specified, but in the -O case, only FTS_COMFOLLOW was given. Fix this to use FTS_COMFOLLOW | FTS_PHYSICAL. - The switch on the entry type returned by fts_read() did not check for symbolic links, so symbolic links fell into the default case and were always passed to procfile() even when -p was given. Fix this by adding cases in the switch statement to explicitly ignore FTS_SL. - FTS_NOSTAT was passed to fts_open(), so fts_open() couldn't detect symbolic links when FTS_PHYSICAL was passed, instead both regular files and symbolic links were returned as FTS_NSOK entries. Fix by only using FTS_NOSTAT with FTS_LOGICAL. While here, fix a few other nits: - Treat FTS_NS as an error like FTS_DNR and FTS_ERR. - Just ignore FTS_DP. The logic to skip descending into skipped directories is only relevant when a directory is first visited, not after the directory has been visited. - Use warnc instead of warnx + strerror. PR: 280676 Reviewed by: kevans MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D46255
Diffstat (limited to 'usr.bin/grep/grep.c')
0 files changed, 0 insertions, 0 deletions