summaryrefslogtreecommitdiffstats
path: root/src/parse.c
Commit message (Collapse)AuthorAgeFilesLines
* xtime: Call tzset() from main() instead of lazilyTavian Barnes2024-03-071-6/+6
| | | | | | | | | | | | | POSIX specifies[1] that If a thread accesses tzname, daylight, or timezone directly while another thread is in a call to tzset(), or to any function that is required or allowed to set timezone information as if by calling tzset(), the behavior is undefined. So calling it lazily from arbitrary threads is risky. [1]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/tzset.html
* sanity: Don't use self-init for uninit()Tavian Barnes2024-02-121-4/+4
| | | | | | | | | | | Self-initialization like bool ret = ret; is a GCC trick to suppress uninitialized variable warnings, but it's not actually well-defined, and will trip a recent enough MemorySanitizer: src/eval.c:1088:13: runtime error: load of value 128, which is not a valid value for type 'bool'
* ctx: Fill in ctx->threads earlierTavian Barnes2024-02-061-4/+2
|
* expr: Make expressions variadicTavian Barnes2024-01-071-48/+25
| | | | | | | | | Rather than only unary/binary expressions, we now support an arbitrary number of children. The optimizer has been re-written almost completely and now supports optimal reordering of longer expression chains, rather than just arm-swapping. Fixes #85.
* expr: Arena-allocate expressionsTavian Barnes2023-12-201-208/+132
|
* parse: s/parser_state/bfs_parser/Tavian Barnes2023-12-201-476/+476
|
* expr: Move some implementation into expr.cTavian Barnes2023-12-201-45/+0
|
* config: s/attr_format/attr_printf/Tavian Barnes2023-12-181-7/+7
|
* config: New variadic attr(...) macroTavian Barnes2023-12-181-7/+7
|
* parse: Reject integers that start with whitespaceTavian Barnes2023-12-091-1/+5
|
* ctx: Switch paths from darray to RESERVE()Tavian Barnes2023-11-231-10/+10
|
* config: s/BFS_FORMATTER/attr_format/Tavian Barnes2023-11-091-7/+7
|
* parse: Reject -{exec,ok}dir if $PATH contains a relative pathTavian Barnes2023-11-071-0/+26
| | | | This matches the behaviour of GNU find.
* Treat NO_COLOR="" the same as unsetTavian Barnes2023-11-061-1/+2
| | | | | | | | | | | | | | The docs say > Command-line software which adds ANSI color to its output by default > should check for a NO_COLOR environment variable that, when present > and not an empty string (regardless of its value), prevents the > addition of ANSI color. but we were not checking for the empty string. Link: https://no-color.org/ Link: https://github.com/sharkdp/fd/pull/1421
* bfstd: New xwaitpid() wrapperTavian Barnes2023-10-311-1/+1
|
* parse: Set BFTW_WHITEOUTS when parsing -type wTavian Barnes2023-10-171-0/+3
|
* bfstd: Add a thread-safe wrapper for strerror()Tavian Barnes2023-10-051-2/+2
|
* Formatting fixesTavian Barnes2023-09-271-23/+22
|
* parse: Give more ephemeral_fds to -no{user,group}Tavian Barnes2023-09-121-7/+9
| | | | | | | | Fewer than 3 can lead to Assertion failed: (retval->write_queue != -1), function __open_cached_connection, file /usr/src/lib/libc/net/nscachedcli.c, line 224. on a FreeBSD system with LDAP accounts.
* Work around https://github.com/llvm/llvm-project/issues/64946Tavian Barnes2023-08-231-0/+3
|
* parse: Allow -files0-from an empty set of pathsTavian Barnes2023-08-141-10/+3
| | | | This follows a behaviour change in GNU findutils 4.9.0.
* parse: Reject -j0Tavian Barnes2023-07-121-1/+9
|
* Use strcmp() instead of fnmatch() if possibleTavian Barnes2023-07-061-5/+12
|
* parse: Warn about errors parsing $LS_COLORSTavian Barnes2023-06-291-1/+5
|
* Unify macro naming conventionsTavian Barnes2023-06-241-2/+2
| | | | | In particular, macros that decide whether to use a particular API/ dependency should be spelled BFS_USE_*, and should be configurable.
* alloc: New header for memory allocation utilitiesTavian Barnes2023-06-201-25/+3
|
* bfstd: New xmemdup() functionTavian Barnes2023-06-201-5/+2
|
* parse: Shell-escape arguments in diagnosticsTavian Barnes2023-06-161-6/+6
|
* parse: Don't default to depth-first when argv[0] is "find"Tavian Barnes2023-06-141-6/+0
|
* bftw: Use an I/O queue to open directoriesTavian Barnes2023-06-131-1/+25
| | | | Parallelism is controlled by the new -j flag.
* sanity: Add wrappers for sanitizer interfacesTavian Barnes2023-05-251-0/+1
|
* Switch from assert() to bfs_assert()/bfs_verify()Tavian Barnes2023-05-181-4/+3
|
* Use bfs_bug("...") over assert(!"...")Tavian Barnes2023-05-181-2/+2
|
* config: Provide <stdalign.h> and <stdbool.h>Tavian Barnes2023-05-111-1/+0
| | | | In anticipation of C23, since those headers won't be necessary any more.
* config: s/BFS_FALLTHROUGH/fallthru/Tavian Barnes2023-05-101-9/+9
|
* config: s/BFS_UNINIT/uninit/Tavian Barnes2023-05-101-4/+4
|
* config: Hoist the assignment outside of BFS_UNINIT()Tavian Barnes2023-05-081-4/+4
|
* Replace license boilerplate with SPDX tagsTavian Barnes2023-01-251-15/+2
| | | | | | | And while I'm at it, remove years from copyright declarations. Link: https://spdx.dev/about/ Link: https://daniel.haxx.se/blog/2023/01/08/copyright-without-years/
* opt: Move probabilities out of the parserTavian Barnes2023-01-241-120/+29
|
* opt: Move costs out of the parserTavian Barnes2023-01-241-51/+3
|
* opt: Move always_{true,false} out of the parserTavian Barnes2023-01-241-50/+6
|
* opt: Move purity out of the parserTavian Barnes2023-01-241-25/+2
|
* bfstd: New wrappers for dirname()/basename()Tavian Barnes2023-01-191-2/+4
|
* parse: Mark another variable with BFS_UNINIT()Tavian Barnes2022-12-091-1/+1
|
* config: New BFS_UNINIT() macro for intentionally uninitialized variablesTavian Barnes2022-12-091-3/+3
|
* expr: Rename bfs_expr_has_children() to _is_parent()Tavian Barnes2022-12-051-6/+6
|
* parse: Fix crash on -xdev -mountTavian Barnes2022-11-301-1/+1
|
* parse: Pass the right argument when warning about -O9Tavian Barnes2022-11-301-1/+1
|
* expr: Remove the singleton bfs_{true,false} expressionsTavian Barnes2022-11-301-138/+168
|
* expr: Remove the synthetic flagTavian Barnes2022-11-291-9/+0
| | | | | Only diagnostics cares about this, and we can just check if the pointers are equal.