Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | color: Don't color files like directories on ENOTDIR | Tavian Barnes | 2024-10-16 | 1 | -114/+230 |
| | |||||
* | color: Fix an infinite loop colorizing some invalid paths | Tavian Barnes | 2024-10-13 | 1 | -8/+11 |
| | | | | | | | | | | | | | | Previously, given $ touch file $ ln -s file/file notdir $ bfs notdir/file bfs would loop forever when printing the error message, since it expected stripping the trailing slash from "notdir/" to fix the ENOTDIR error, but the broken symlink still gave the same error. Fixes: b4c3201 ("color: Only highlight the trailing slash on ENOTDIR") | ||||
* | sighook: Don't forget to reset list->tail on the last sigpop() | Tavian Barnes | 2024-10-10 | 1 | -0/+2 |
| | | | | | | | This was causing a UAF if we ever unregistered the last hook for a signal and then re-registered one. Fixes: 75b7f70 ("sighook: Make sigunhook() O(1)") | ||||
* | eval: Use xtimer_start() for status bar updates | Tavian Barnes | 2024-10-10 | 1 | -36/+76 |
| | |||||
* | xtime: Add a wrapper for timer_create()/setitimer() | Tavian Barnes | 2024-10-10 | 2 | -0/+120 |
| | | | | | | setitimer() is obsolescent in POSIX 2008 and removed from POSIX 2024. However, at least macOS doesn't implement the new timer_create() API, so we still need the setitimer() fallback. | ||||
* | Adjust in/out parameter docs | Tavian Barnes | 2024-10-10 | 5 | -11/+11 |
| | |||||
* | Fix some -Wundef-prefix warnings | Tavian Barnes | 2024-10-10 | 4 | -6/+14 |
| | |||||
* | trie: Switch the tag bits around | Tavian Barnes | 2024-10-08 | 1 | -31/+28 |
| | | | | | | First of all, almost all checks were !trie_is_leaf(), so it makes sense to use trie_is_node() instead. Secondly, using the tag bit for internal nodes allows us to remove some NULL checks. | ||||
* | trie: Add some extra bounds checking | Tavian Barnes | 2024-10-08 | 1 | -13/+24 |
| | |||||
* | opt: Remove duplicate assignment in canonicalize_not() | Tavian Barnes | 2024-10-04 | 1 | -1/+0 |
| | |||||
* | color: Fix an assertion failure with embedded NUL bytes | Tavian Barnes | 2024-10-02 | 1 | -0/+10 |
| | | | | | | | | | | | | | Leading NUL bytes (e.g. `*\0.gz=...`) could cause us to insert a non-prefix-free set of strings into the case-insensitive extension trie, which would lead to crashes like bfs: trie_split@src/trie.c:538: Assertion failed: `key_nibble != rep_nibble` and OOB accesses to trie leaf keys. Fix it by ignoring those extensions, since filenames cannot contain NUL bytes. Fixes: 08030aea ("color: Delay the case_sensitive decision") | ||||
* | Write @arg instead of @param arg in doc comments | Tavian Barnes | 2024-10-01 | 27 | -367/+367 |
| | |||||
* | build: Add -Wundef-prefix=BFS_ | Tavian Barnes | 2024-10-01 | 2 | -0/+12 |
| | |||||
* | list: Make SLIST_REMOVE() more type-safe | Tavian Barnes | 2024-09-30 | 1 | -25/+20 |
| | | | | | | This avoids what might be a strict aliasing violation in some models. Link: https://github.com/llvm/llvm-project/pull/108385#issuecomment-2352938645 | ||||
* | Fix spelling | Tavian Barnes | 2024-09-23 | 6 | -6/+6 |
| | |||||
* | list: New drain_slist() macro | Tavian Barnes | 2024-09-19 | 4 | -39/+49 |
| | |||||
* | opt: #include "xspawn.h" before #ifdef POSIX_SPAWN_SETRLIMIT | Tavian Barnes | 2024-09-17 | 1 | -0/+1 |
| | | | | Fixes: 65a7814 ("opt: Don't raise RLIMIT_NOFILE if it would prevent using posix_spawn()") | ||||
* | opt: Fix an invalid assertion in sink_not_comma() | Tavian Barnes | 2024-09-17 | 1 | -4/+3 |
| | | | | | | | When optimizing -not \( -a , -b \), the child is a comma expression, not the parent. Fixes: 4a36bb9 ("expr: Make expressions variadic") | ||||
* | parse: Add a "logo" to bfs --version | Tavian Barnes | 2024-09-14 | 1 | -1/+32 |
| | |||||
* | dstring: New dstrepeat() function | Tavian Barnes | 2024-09-14 | 2 | -0/+22 |
| | |||||
* | opt: Add missing newline to debug statement | Tavian Barnes | 2024-09-12 | 1 | -1/+1 |
| | | | | Fixes: 9b8cf46 ("opt: Warn about all ignored tests") | ||||
* | Fix includes | Tavian Barnes | 2024-08-29 | 7 | -4/+6 |
| | |||||
* | build: Move feature test macros to prelude.h | Tavian Barnes | 2024-08-28 | 46 | -69/+57 |
| | | | | | | This replaces the explicit CPPFLAGS list in flags.mk with just `-include src/prelude.h`, shortening our compiler command lines and allowing them to be easily documented. | ||||
* | prelude: Split bfs-specific utilities into new bfs.h header | Tavian Barnes | 2024-08-28 | 50 | -194/+339 |
| | |||||
* | prelude: Rely more on __has_include() | Tavian Barnes | 2024-08-28 | 7 | -96/+31 |
| | | | | | Rather than a bunch of manual fallback macros, just provide a fallback definition that returns false. | ||||
* | build: Move tsan/target_clones conflict to the prelude | Tavian Barnes | 2024-08-28 | 1 | -1/+3 |
| | |||||
* | prelude: Define __SANITIZE_*__ | Tavian Barnes | 2024-08-28 | 6 | -24/+21 |
| | |||||
* | diag: Get rid of bfs_static_assert() | Tavian Barnes | 2024-08-28 | 3 | -13/+2 |
| | | | | | In most cases, it's not too annoying to specify a message. For tests/bit.c, we can manually polyfill the 1-argument version. | ||||
* | prelude: Define thread_local | Tavian Barnes | 2024-08-28 | 2 | -11/+17 |
| | |||||
* | bftw: Handle a hypothetical platform where AT_FDCWD == -1 | Tavian Barnes | 2024-08-28 | 1 | -2/+2 |
| | |||||
* | prelude: Stub out __has_builtin() if necessary | Tavian Barnes | 2024-08-23 | 1 | -0/+4 |
| | | | | Fixes: c964524 ("atomic: Add a spin_loop() hint") | ||||
* | eval: Don't warn about suppressed errors without -noerror | Tavian Barnes | 2024-08-19 | 1 | -1/+1 |
| | |||||
* | sighook: Fix typo in comment | Tavian Barnes | 2024-08-17 | 1 | -1/+1 |
| | |||||
* | eval: Capitalize -noerror warning message | Tavian Barnes | 2024-08-17 | 1 | -1/+1 |
| | |||||
* | docs: Document the new -mount vs. -xdev behaviour | Tavian Barnes | 2024-08-16 | 1 | -2/+1 |
| | | | | Fixes: 33b85e1 ("Implement POSIX 2024's -mount") | ||||
* | New -noerror option to suppress error messages | Tavian Barnes | 2024-08-16 | 3 | -1/+29 |
| | | | | Closes: https://github.com/tavianator/bfs/issues/142 | ||||
* | eval: Remove info_hook from callback_args | Tavian Barnes | 2024-08-16 | 1 | -4/+2 |
| | |||||
* | opt: Warn about all ignored tests | Tavian Barnes | 2024-08-15 | 1 | -31/+34 |
| | | | | | This lets us warn about `bfs -delete -empty`, even though -empty is impure. | ||||
* | expr: Tell expressions what kind of expression they are | Tavian Barnes | 2024-08-15 | 5 | -200/+205 |
| | |||||
* | Default to no for "Do you want to continue?" prompts | Tavian Barnes | 2024-08-13 | 2 | -2/+2 |
| | |||||
* | opt: Add a missing NULL check in lift_andor_not() | Tavian Barnes | 2024-08-12 | 1 | -0/+4 |
| | | | | | The annotation visitor probably can't fail, but we might as well check consistently. | ||||
* | opt: Warn about ignored expressions after dangerous actions | Tavian Barnes | 2024-08-12 | 3 | -25/+79 |
| | | | | | | For example, `bfs -delete -type f` is almost certainly a mistake. Link: https://savannah.gnu.org/bugs/?65895 | ||||
* | opt: Copy data flow back up from the nested context in optimize() | Tavian Barnes | 2024-08-12 | 1 | -2/+11 |
| | | | | | | | | This fixes warnings on commands like `bfs -exclude -true` or `bfs -exclude -type f -type f`, because the data flow is properly shared between the -exclude expression and the main one. Fixes: 4a36bb9 ("expr: Make expressions variadic") | ||||
* | sighook: Disable semaphores on NetBSD | Tavian Barnes | 2024-08-11 | 1 | -1/+2 |
| | |||||
* | bfstd: New sysoption() macro to check for POSIX option runtime support | Tavian Barnes | 2024-08-09 | 5 | -39/+84 |
| | | | | | | | | | | POSIX allows optional features to be supported at compile time but not necessarily at run time by defining _POSIX_OPTION to 0 and requiring users to check sysconf(_SC_OPTION) > 0. The new sysoption() macro simplifies the check. sighook() and bfs_spawn() now check for conditional runtime support for the relevant POSIX options. | ||||
* | xtime: Remove xgettime() | Tavian Barnes | 2024-08-09 | 4 | -37/+8 |
| | | | | clock_gettime() is available everywhere by now. | ||||
* | prelude: s/fallthru/_fallthrough/ for consistency with other attributes | Tavian Barnes | 2024-08-09 | 5 | -15/+15 |
| | |||||
* | bar: Hide the bar unless the TTY is tall enough | Tavian Barnes | 2024-08-07 | 1 | -13/+23 |
| | |||||
* | parse: Take umask into account in parse_mode() | Tavian Barnes | 2024-08-02 | 3 | -8/+22 |
| | | | | | | | POSIX 2024 clarified that find(1) is meant to work exactly like chmod(1) here, so for modes like +rw,-x with no "who" specified, apply the umask. Link: https://www.austingroupbugs.net/view.php?id=1392 | ||||
* | parse: Fix names in parse_mode() | Tavian Barnes | 2024-08-02 | 1 | -14/+14 |
| | | | | | | | Commit 9c6e4ce ("parse: s/parser_state/bfs_parser/") was a little to overzealous in replacing "state" with "parser", resulting in the tortured phrase "parser machine parser" instead of "state machine state". |