summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* README: Reformat with details blocks to make it more easily skimmableTavian Barnes2022-02-221-30/+111
| | | | | And add some extra information about bfs-specific features, and installing dependencies.
* Use EXTRA_CFLAGS instead of CFLAGS in make distcheckTavian Barnes2022-02-211-1/+1
|
* Enable Oniguruma by defaultTavian Barnes2022-02-214-7/+15
|
* regex: Use the real Oniguruma API, not the POSIX wrapperTavian Barnes2022-02-211-11/+84
| | | | | | | Not every Oniguruma installation enables the POSIX wrapper, so we need our own wrapper for portability. As well, older versions of Oniguruma have symbol clashes with libc for the POSIX regex API, so using it can be unsafe.
* regex: Wrap the POSIX API in a facadeTavian Barnes2022-02-217-63/+152
|
* tests: Mark -fprint/-exec flushing test bfs-specificTavian Barnes2022-02-181-2/+3
| | | | GNU find doesn't do it, so no reason to require it for compatibility.
* exec: Flush I/O streams before executing anythingTavian Barnes2022-02-115-1/+67
| | | | | | Otherwise output from commands may appear unexpectedly earlier than output from bfs. We use fflush(NULL) to flush all streams, which is more than GNU find does, but seems to be a useful extension.
* ctx: Also check ferror(stdout)Tavian Barnes2022-02-111-15/+27
| | | | | | Previously this was checked for all other files, but for stdout we just checked the return value of fflush(). Checking ferror() makes sure we don't miss any errors that occurred on a previous flush.
* tests: Use skip_if for tests that need /dev/fullTavian Barnes2022-02-111-22/+14
|
* tests: Add a test that -exit suppresses the implicit -printTavian Barnes2022-02-102-0/+5
|
* Makefile: Allow extra flags to be passed with EXTRA_*FLAGS variablesTavian Barnes2022-02-091-4/+4
|
* tests: Skip case insensitive tests if FNM_CASEFOLD is missingTavian Barnes2022-02-081-0/+5
|
* tests: Separate skipped tests from passing testsTavian Barnes2022-02-081-34/+39
|
* tests: Disable some glob tests on macOSTavian Barnes2022-02-041-0/+10
| | | | | macOS seems to have a non-compliant fnmatch() that doesn't treat invalid character class expressions literally.
* regex: Add support for emacs and grep typesTavian Barnes2022-02-0411-31/+151
|
* tests: Add tests for syntactically invalid globsTavian Barnes2022-02-0213-0/+46
|
* tests: New tests for -i?wholenameTavian Barnes2022-02-013-0/+26
|
* tests: New test for ** in a globTavian Barnes2022-02-012-0/+9
|
* tests: New test for -prune on a non-directoryTavian Barnes2022-02-012-0/+15
|
* tests: Try to color diff outputTavian Barnes2022-02-011-11/+18
|
* tests: set -P for the whole scriptTavian Barnes2022-02-011-2/+1
| | | | We rely on physical path resolution in test_execdir_pwd.
* tests: Allow tests.sh to be invoked from any directoryTavian Barnes2022-02-012-14/+22
| | | | | This also resolves the path passed to --bfs early, so --bfs=./bfs now works.
* parse: Add support for ed and sed regexesTavian Barnes2022-01-304-1/+20
| | | | They're apparently the same as POSIX basic regexes.
* Revert "tests: Add a test for posix-basic alternation"Tavian Barnes2022-01-292-7/+0
| | | | | | | Turns out alternation is not actually part of the POSIX basic regular expression language, it's just a glibc extension. This reverts commit c898af13a671ee92a056467d324f16823594eb1c.
* tests: Add a test for posix-basic alternationTavian Barnes2022-01-292-0/+7
|
* Standardize WITH_* make variables for configuring dependenciesTavian Barnes2022-01-297-32/+54
|
* Merge pull request #81 from data-man:oniguruma_1Tavian Barnes2022-01-297-6/+37
|\
| * Apply suggestions from code reviewdata-man2022-01-242-12/+8
| |
| * Simplifyingdata-man2022-01-246-31/+31
| |
| * Using Oniguruma library (optionally)data-man2022-01-246-5/+40
|/
* Release 2.3.12.3.1Tavian Barnes2022-01-213-2/+16
|
* bftw: Use a dynamic array for the cacheTavian Barnes2022-01-181-45/+42
| | | | | | | Since commit 69a5227 ("eval: Raise RLIMIT_NOFILE if possible"), bfs can pass a large nopenfd (e.g. 512K) to bftw() by default. This resulted in a large up-front allocation even for small trees. Change it to grow on demand, lowering the footprint for small searches.
* darray: New DARRAY_POP() macroTavian Barnes2022-01-182-2/+34
|
* dstring: Set a minimum capacity to avoid reallocating for small stringsTavian Barnes2022-01-181-1/+6
|
* tests: Add missing license headersTavian Barnes2022-01-182-0/+32
|
* tests/trie: Fix "handling" typoTavian Barnes2022-01-181-1/+1
|
* util: New close() wrappers to check for EBADF and preserve errnoTavian Barnes2022-01-189-53/+66
|
* dir: Fix extra close() if fdopendir() failsTavian Barnes2022-01-181-2/+4
|
* Add some missing (void)'sTavian Barnes2022-01-182-2/+2
|
* ci/macos: Switch back to macos-latestTavian Barnes2021-12-192-24/+34
|
* ci/macos: Downgrade to macOS 10.15Tavian Barnes2021-12-101-1/+2
| | | | | | | macOS 11 comes with a broken touch(1) that ignores -h. Work around it for now by downgrading macOS. Link: https://apple.stackexchange.com/a/425730/397839
* tests: Set TZ to a real timezoneTavian Barnes2021-12-101-1/+1
| | | | | | | POSIX states that the offset is not optional in the TZ environment variable. Link: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html
* stat: Work around GNU Hurd bugTavian Barnes2021-12-101-1/+2
| | | | | | | fstatat(fd, "", buf, AT_EMPTY_PATH) fails with a nonsense errno on Hurd. Since fstat() itself works fine, just use that. Link: https://lists.gnu.org/archive/html/bug-hurd/2021-12/msg00001.html
* eval: Check that RLIM_SAVED_{CUR,MAX} are defined before using themTavian Barnes2021-12-051-3/+24
| | | | | Apparently they're missing on Debian kfreebsd: https://buildd.debian.org/status/fetch.php?pkg=bfs&arch=kfreebsd-amd64&ver=2.3-1&stamp=1638379495&raw=0
* ci/freebsd: Don't pin an old tailscale version2.3Tavian Barnes2021-11-251-1/+0
|
* Release 2.3Tavian Barnes2021-11-254-3/+25
|
* exec: Add a bit of backoff during ARG_MAX bisectionTavian Barnes2021-11-231-7/+11
| | | | | This reduces the number of E2BIGs we see if binary search reaches the top of the possible range.
* exec: Find ARG_MAX with binary search after E2BIGTavian Barnes2021-11-172-14/+67
| | | | | | | | | | | | | | | | | | | | | Previously we would shrink the command by one argument at a time until a successful execution. This is okay if the ARG_MAX estimate is just a little bit off, but is terribly slow when it's off by a lot. One situation where it's very far off is when a 32-bit build of bfs launches a 64-bit binary. In this case, bfs thinks the argv pointers are 4 bytes, while they actually take up 8 bytes. The performance is quite bad: $ time ./bfs-64 ~/code/linux -exec echo {} + >/dev/null ./bfs-64 ~/code/linux -exec echo {} + > /dev/null 0.03s user 0.07s system 99% cpu 0.095 total $ time ./bfs-32 ~/code/linux -exec echo {} + >/dev/null ./bfs-32 ~/code/linux -exec echo {} + > /dev/null 0.08s user 10.33s system 100% cpu 10.390 total After this change, performance is much better: $ time ./bfs-32 ~/code/linux -exec echo {} + >/dev/null ./bfs-32 ~/code/linux -exec echo {} + > /dev/null 0.03s user 0.08s system 99% cpu 0.110 total
* parse: Switch back to O_TRUNC from explicit ftruncate()Tavian Barnes2021-10-192-31/+16
| | | | | | | | O_TRUNC is not equivalent to an unconditional ftruncate(), e.g. for device files. This reverts the behaviour change from 78944c81, which was never released and is not supported in other find implementations.
* tests: Distinguish between failures and crashesTavian Barnes2021-10-191-47/+61
|