Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | Re-license under the BSD Zero Clause License | Tavian Barnes | 2017-07-27 | 23 | -234/+343 | |
| | ||||||
* | Release 1.11.1 | Tavian Barnes | 2017-07-22 | 3 | -2/+20 | |
| | ||||||
* | Represent never returning as always_true && always_false | Tavian Barnes | 2017-07-21 | 3 | -34/+42 | |
| | | | | | | | | | | Expressions that never return are vacuously always both true and false. Using this representation lets us take advantage of existing truth-based optimizations, which gets us optimizations of command lines like bfs -name foo -quit -print for free. | |||||
* | Fix a couple terrible optimizer bugs | Tavian Barnes | 2017-07-21 | 4 | -2/+14 | |
| | | | | | | | Just because an expression is always true or false, doesn't mean we can execute it more often than it otherwise would be, unless it's also pure. But that's equivalent to being identically -true/-false, so just check that. | |||||
* | Implement -printx | Tavian Barnes | 2017-07-21 | 5 | -0/+81 | |
| | | | | Also from NetBSD. | |||||
* | main: Call setlocale() at startup to use the system locale | Tavian Barnes | 2017-07-20 | 2 | -0/+14 | |
| | ||||||
* | eval: Add some sanity checks | Tavian Barnes | 2017-07-20 | 4 | -0/+35 | |
| | ||||||
* | Implement -exit [STATUS] | Tavian Barnes | 2017-07-20 | 6 | -12/+75 | |
| | | | | From NetBSD again. | |||||
* | Implement -rm as an alias for -delete | Tavian Barnes | 2017-07-20 | 4 | -4/+25 | |
| | | | | From NetBSD. | |||||
* | Revert "tests.sh: Better line overwriting" | Tavian Barnes | 2017-07-20 | 1 | -4/+5 | |
| | | | | | | This reverts commit 4b02d5dae771a8797868ccaddf1bbb7cf0b67c2b. Overwriting the last line of the test output is worse. | |||||
* | tests.sh: Better line overwriting | Tavian Barnes | 2017-07-18 | 1 | -5/+4 | |
| | | | | | This way the cursor is always at the beginning of the line, so any error output is more readable. | |||||
* | tests.sh: Make closefrom() behave like its namesake | Tavian Barnes | 2017-07-18 | 1 | -3/+3 | |
| | ||||||
* | tests.sh: Close extraneous fds for tests that depend on ulimit | Tavian Barnes | 2017-07-16 | 1 | -0/+17 | |
| | ||||||
* | parse: Ask for confirmation in some cases | Tavian Barnes | 2017-07-16 | 2 | -108/+157 | |
| | ||||||
* | Handle yes/no prompts correctly according to the locale | Tavian Barnes | 2017-07-15 | 3 | -7/+80 | |
| | ||||||
* | parse: Warn if -depth and -prune are used together | Tavian Barnes | 2017-07-09 | 1 | -0/+19 | |
| | ||||||
* | Handle ENOTDIR the same as ENOENT | Tavian Barnes | 2017-07-09 | 11 | -3/+21 | |
| | | | | | | For a/b/c, ENOTDIR is returned instead of ENOENT if a or b are not directories. Handle this uniformly when detecting broken symlinks, readdir races, etc. | |||||
* | bftw: Rename and refactor the internals | Tavian Barnes | 2017-07-09 | 1 | -235/+257 | |
| | ||||||
* | bftw: Fix ENAMETOOLONG handling when the root is closed | Tavian Barnes | 2017-07-08 | 4 | -12/+33 | |
| | | | | | The root has depth == 0, but we still need to include it in the components array. | |||||
* | exec: Clear errno when a multi-exec doesn't fail | Tavian Barnes | 2017-07-08 | 1 | -1/+6 | |
| | | | | | | | This fixes strange "Inappropriate ioctl for device" errors when using -exec ... + with output redirection. errno was set to ENOTTY by the isatty() call during startup for color auto-detection, and never cleared before eval_exec() wants to check if anything went wrong. | |||||
* | bftw: Recover from ENAMETOOLONG | Tavian Barnes | 2017-07-08 | 3 | -23/+137 | |
| | | | | | | | | | | | | | | | | | | | | | | | | It is always possible to force a breadth-first traversal to encounter ENAMETOOLONG, regardless of the dircache eviction policy. As a concrete example, consider this directory structure: ./1/{NAME_MAX}/{NAME_MAX}/{NAME_MAX}/... (longer than {PATH_MAX}) ./2/{NAME_MAX}/{NAME_MAX}/{NAME_MAX}/... ./3/{NAME_MAX}/{NAME_MAX}/{NAME_MAX}/... ... (more than RLIMIT_NOFILE directories under .) Eventually, the next file to be processed will not have any parents in the cache, as the cache can only hold RLIMIT_NOFILE entries. Then the whole path must be traversed from ., which will exceed {PATH_MAX} bytes. Work around this by performing a component-by-component traversal manually when we see ENAMETOOLONG. This is required by POSIX: > The find utility shall be able to descend to arbitrary depths in a file > hierarchy and shall not fail due to path length limitations (unless a > path operand specified by the application exceeds {PATH_MAX} > requirements). | |||||
* | Revert "bftw: Don't store the terminating '\0' in dircache_entry names." | Tavian Barnes | 2017-07-08 | 1 | -1/+2 | |
| | | | | | | | This reverts commit 20860becb5a0e89ee2aaaddbb0ba1eb248552640. The terminating NUL will be useful for the upcoming per-component traversal to handle ENAMETOOLONG. | |||||
* | Release 1.0.21.0.2 | Tavian Barnes | 2017-06-15 | 3 | -2/+13 | |
| | ||||||
* | -perm: Handle permcopy (e.g. u=rw,g=u) correctly | Tavian Barnes | 2017-06-15 | 3 | -5/+22 | |
| | ||||||
* | tests: Fix test_printf_nul with non-GNU sort | Tavian Barnes | 2017-06-11 | 2 | -1/+7 | |
| | | | | | Other UNIX sort implementations seem to truncate at the nul bytes, so open-code it without the sort. | |||||
* | printf: Fix embedded nul bytes | Tavian Barnes | 2017-06-10 | 5 | -11/+37 | |
| | | | | Fixes #26. | |||||
* | parse: Make some error messages red | Tavian Barnes | 2017-06-03 | 1 | -2/+4 | |
| | ||||||
* | Add Homebrew installation instructions | Peter Brunner | 2017-06-03 | 1 | -0/+2 | |
| | ||||||
* | Release 1.0.11.0.1 | Tavian Barnes | 2017-05-17 | 3 | -2/+14 | |
| | ||||||
* | parse: Set always_true for some actions that never return false | Tavian Barnes | 2017-05-17 | 1 | -3/+25 | |
| | ||||||
* | bftw: Remove unused parameter to dircache_entry_base() | Tavian Barnes | 2017-05-17 | 1 | -5/+3 | |
| | ||||||
* | Add colors to -D tree | Tavian Barnes | 2017-05-15 | 3 | -37/+51 | |
| | ||||||
* | Optimize based on reachability due to -quit | Tavian Barnes | 2017-05-15 | 2 | -43/+85 | |
| | ||||||
* | Don't make -quit disable the implicit -print | Tavian Barnes | 2017-05-11 | 3 | -3/+9 | |
| | ||||||
* | Implement -D exec | Tavian Barnes | 2017-05-09 | 4 | -13/+63 | |
| | ||||||
* | main: Fix error checking of redirect() | Tavian Barnes | 2017-05-06 | 1 | -1/+3 | |
| | ||||||
* | exec: Treat -1 from _SC_ARG_MAX as "unlimited" | Tavian Barnes | 2017-04-30 | 1 | -1/+1 | |
| | ||||||
* | mtab: Check __GLIBC__ instead of __linux__ for getmntent() | Tavian Barnes | 2017-04-30 | 1 | -2/+2 | |
| | ||||||
* | Pass AT_EACCESS to faccessat() | Tavian Barnes | 2017-04-30 | 2 | -2/+2 | |
| | | | | | That's the form that actually answers the expected question ("can I open() this"), and the only form Hurd supports. | |||||
* | Don't forget an access mode to openat() in -empty | Tavian Barnes | 2017-04-30 | 1 | -1/+1 | |
| | ||||||
* | Don't parse the mount table until it's needed | Tavian Barnes | 2017-04-29 | 3 | -12/+14 | |
| | ||||||
* | mtab: Don't hardcode /etc/mtab | Tavian Barnes | 2017-04-29 | 1 | -1/+1 | |
| | ||||||
* | Add Debian installation instructions. | Chris Lamb | 2017-04-29 | 1 | -0/+2 | |
| | ||||||
* | Release 1.01.0 | Tavian Barnes | 2017-04-24 | 12 | -11/+42 | |
| | ||||||
* | Implement -fstype | Tavian Barnes | 2017-04-23 | 10 | -7/+319 | |
| | | | | Fixes #6! | |||||
* | Make -help output prettier and more complete | Tavian Barnes | 2017-04-16 | 2 | -50/+260 | |
| | ||||||
* | tests.sh: Allow individual tests to be specified on the command line | Tavian Barnes | 2017-04-16 | 1 | -10/+16 | |
| | ||||||
* | Implement -X | Tavian Barnes | 2017-04-16 | 7 | -0/+51 | |
| | ||||||
* | tests: Add tests for bfs extensions to -exec ... + | Tavian Barnes | 2017-04-16 | 3 | -0/+22 | |
| | ||||||
* | exec: Interpret ARG_MAX corretly. | Tavian Barnes | 2017-04-15 | 2 | -34/+117 | |
| | | | | Thanks to https://www.in-ulm.de/~mascheck/various/argmax/ |