summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* opt: Copy data flow back up from the nested context in optimize()Tavian Barnes2024-08-121-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 NetBSDTavian Barnes2024-08-111-1/+2
|
* bfstd: New sysoption() macro to check for POSIX option runtime supportTavian Barnes2024-08-095-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 Barnes2024-08-094-37/+8
| | | | clock_gettime() is available everywhere by now.
* prelude: s/fallthru/_fallthrough/ for consistency with other attributesTavian Barnes2024-08-095-15/+15
|
* bar: Hide the bar unless the TTY is tall enoughTavian Barnes2024-08-071-13/+23
|
* parse: Take umask into account in parse_mode()Tavian Barnes2024-08-023-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 Barnes2024-08-021-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".
* Update opengroup.org links to POSIX 2024Tavian Barnes2024-08-023-8/+8
|
* Revert "typo: Raise the insert/delete cost"Tavian Barnes2024-08-021-1/+1
| | | | | | | That was a little too aggressive, with -alse suggesting -size instead of -false. This reverts commit 0d6822ee71c1f60c8003e13ab149501e586f9ae6.
* bar: #include <unistd.h> for ioctl() on IllumosTavian Barnes2024-08-011-0/+1
|
* bar: Use tcgetwinsize() from POSIX 2024 if availableTavian Barnes2024-07-281-3/+10
|
* prelude: Simplify attributesTavian Barnes2024-07-2820-179/+125
|
* xspawn: Fix error message if pthread_sigmask() failsTavian Barnes2024-07-271-2/+2
|
* xspawn: Use _Fork() if availableTavian Barnes2024-07-271-0/+4
| | | | | | | This completes the workaround for bfs_spawn() hanging on FreeBSD with ASan enabled. Link: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=280318
* opt: -empty implies -type f,dTavian Barnes2024-07-171-5/+22
|
* opt: -lname implies -type lTavian Barnes2024-07-171-0/+7
|
* xspawn: Test the right macro for posix_spawn_..._addfchdir() supportTavian Barnes2024-07-161-1/+1
| | | | | | | | | | This should have been benign (just a performance regression), but FreeBSD has a bug that causes the fork()-based fallback to lock up when ASAN is enabled, due to fork() and dl_iterate_phdr(). This is not a complete workaround for that issue, since the fork() fallback may be used for other reasons. Fixes: 29ddac2 ("config: Check for posix_spawn_file_actions_addfchdir{,_np}()")
* sighook: Make sigunhook() O(1)Tavian Barnes2024-07-151-41/+51
|
* Implement POSIX 2024's -mountTavian Barnes2024-07-081-4/+1
| | | | | | This reverts commit 4f80c17192f2b28c96a489969d4435151d68d0ce. Link: https://www.austingroupbugs.net/view.php?id=1133
* sighook: Replace sigtables with RCU-protected linked listsTavian Barnes2024-07-071-148/+68
| | | | | | | | This fixes an ABA problem where sigdispatch() could think no handlers are registered for a signal even when there are. Link: https://unix.stackexchange.com/a/779594/56202 Fixes: 375caac ("sighook: New utilities for hooking signals")
* color: Delay the case_sensitive decisionTavian Barnes2024-07-021-90/+84
|
* ioq: Do more in the branch-free slot helperTavian Barnes2024-06-201-11/+11
|
* build: Rename CONFIG to CONFFLAGSTavian Barnes2024-06-183-9/+9
|
* bftw: Only resize the string once in bftw_build_path()Tavian Barnes2024-06-181-19/+22
|
* Use dstrx*() over dstrn*() when we know the exact lengthTavian Barnes2024-06-182-7/+7
|
* build: Include CC in bfs --version outputTavian Barnes2024-06-133-0/+6
|
* typo: Raise the insert/delete costTavian Barnes2024-06-081-1/+1
| | | | | It should be at least half the max char distance so that we mostly get replacements, not inserts + deletes.
* xspawn: Check X_OK even without $PATH resolutionTavian Barnes2024-06-081-2/+11
| | | | | | | | | | Not all posix_spawn() implementations use errno to report execv() failures from the child process, as that requires either a kernel posix_spawn() implementation or a pipe to pass the error back. This should fix tests/posix/exec_nonexistent on OpenBSD and HPPA. Link: https://buildd.debian.org/status/fetch.php?pkg=bfs&arch=hppa&ver=3.3.1-1&stamp=1717489148&raw=0
* Embed more configuration info in bfs --versionTavian Barnes2024-06-084-1/+45
|
* sighook: Shard the signal tableTavian Barnes2024-06-071-7/+24
|
* sighook: Ignore sigaction() errors in atsigexit()Tavian Barnes2024-06-071-10/+6
| | | | This fixes bfs under Valgrind, which reserves SIGRTMAX for its own use.
* atomic: Fix RISC-V build with GCC < 14Tavian Barnes2024-06-061-1/+1
| | | | | | | | | | | | Prior to GCC 14.1, the __builtin_riscv_pause() can cause an error if the appropriate extension is not enabled in -march: /tmp/ccR1L1lA.s: Assembler messages: /tmp/ccR1L1lA.s:670: Error: unrecognized opcode `pause', extension `zihintpause' required Link: https://gcc.gnu.org/pipermail/gcc-patches/2023-August/626748.html Link: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=c2d04dd659c499d8df19f68d0602ad4c7d7065c2 Link: https://buildd.debian.org/status/fetch.php?pkg=bfs&arch=riscv64&ver=3.3.1-1&stamp=1717488400&raw=0
* Minor formatting fixesTavian Barnes2024-06-062-22/+22
|
* parse: Remove some unnecessary saving/restoring of errnoTavian Barnes2024-06-051-14/+0
|
* Replace some switch-case lookups with arraysTavian Barnes2024-06-053-83/+45
|
* xtime: Add support for @epochseconds timestampsTavian Barnes2024-06-041-0/+18
|
* bfstd: New xstrtoll() wrapperTavian Barnes2024-06-043-15/+48
|
* Merge branch 'revert-eloop'Tavian Barnes2024-06-032-1/+8
|\
| * Make ELOOP an error again, except for -xtype.3.3.1Tavian Barnes2024-06-032-1/+8
| | | | | | | | | | | | | | | | | | | | POSIX requires an error if (for example) -L encounters a symlink loop. The GNU find change was restricted to -xtype, so add a manual ELOOP test to eval_xtype() for compatibility. This reverts commit 470589cbd9ca3e73d8c01ac3a96cbc065179dcc5. Link: https://savannah.gnu.org/bugs/?19605
* | eval: Fix -D stat printed return valueTavian Barnes2024-06-031-1/+1
| |
* | parse: Allow -Darg/-Sarg as well as -D arg / -S argTavian Barnes2024-06-031-12/+20
| |
* | parse: Handle multiple flags at once like -LEXO2Tavian Barnes2024-06-031-26/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The POSIX Utility Syntax Guidelines specify that flag groups like -HL should be handled like -H -L. GNU find doesn't support grouping flags in this way, but BSD find does. To avoid conflicts with non-flag primaries, for now we require at least one flag in a group to be a capital letter. That is, we support things like -Lds but not -ds. We also do not support -fPATH (without a space) as it would conflict with -follow, -fprint, etc. It is impossible to be compatible with both GNU and BSD find here: user@gnu$ find -follow link link/file ... user@bsd$ find -follow find: ollow: No such file or directory Link: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
* | sighook: Check that atomic size_t is lock-freeTavian Barnes2024-06-031-0/+4
| |
* | list: New SLIST_SPLICE() macroTavian Barnes2024-05-312-5/+21
| |
* | trie: Don't pass a bitfield directly to has_single_bit()Tavian Barnes2024-05-301-1/+1
| |
* | bit: Use <stdbit.h> if it exists, even without -std=c23Tavian Barnes2024-05-292-3/+7
| | | | | | | | glibc added an implementation in 2.39.
* | bit: Update to match C23Tavian Barnes2024-05-291-51/+45
|/ | | | | | | | | | Based on the latest C23 draft (N3220): - Argument types to generic bit functions should be unsigned - Bit functions return unsigned int - Byte-swapping functions (stdc_memreverse8*()) weren't added - stdc_rotate_{left,right}() weren't added - first_leading_*() counts from the *left*
* Implement the remaining regex typesTavian Barnes2024-05-283-6/+71
| | | | Closes: https://github.com/tavianator/bfs/issues/21
* xregex: Support non-capturing groups with -regextype emacsTavian Barnes2024-05-271-1/+7
| | | | | Link: https://savannah.gnu.org/bugs/index.php?65770 Link: https://github.com/kkos/oniguruma/issues/296