summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
| * bftw: Don't immediately pin open directoriesTavian Barnes2024-02-011-4/+5
| | | | | | | | | | | | | | It is undesirable to close a directory that we haven't read yet to free up cache capacity, but it's worse to fail to open the next directory because too many upcoming directories are pinned. This could happen when sorting, because then we can't prioritize the already-opened ones.
| * bftw: Allow forcing bfs_dir allocation from the main threadTavian Barnes2024-02-011-12/+35
| | | | | | | | | | | | | | | | | | When sorting, we can be forced to pop an unopened directory. If enough other directories are already open, that can lead to ENOMEM when we try to open it synchronously. To avoid this, force allocations from the main thread to be attempted even if they would go over the limit. Also, fix the accounting in bftw_allocdir() if allocation fails.
| * bftw: Kill trivial bftw_queue_balance() helperTavian Barnes2024-02-011-7/+2
| |
| * bfstd: Don't shadow FreeBSD's fflags_tTavian Barnes2024-02-011-4/+4
| |
| * bftw: Actually stop if the callback returns BFTW_STOPTavian Barnes2024-01-311-1/+1
| | | | | | | | | | | | Otherwise, bftw_ids() or bftw_eds() might keep going! Fixes: 5f16169 ("bftw: Share the bftw_state between iterations of ids/eds")
| * opt: Charge eval_flags() for a stat() callTavian Barnes2024-01-311-0/+1
| |
| * bftw: Optimize -s -j2 searchesTavian Barnes2024-01-311-2/+1
| | | | | | | | | | Maintaining balance and strict ordering at the same time forces too much work onto the main thread.
| * bftw: Use a bftw_queue for files tooTavian Barnes2024-01-311-26/+31
| |
| * bftw: New bftw_queue abstractionTavian Barnes2024-01-311-74/+292
| |
| * list: Return the next cursor from SLIST_INSERT()Tavian Barnes2024-01-301-7/+10
| |
| * eval: Squelch an uninitialized variable warningTavian Barnes2024-01-221-1/+3
| |
| * ioq: Implement ioq_stat()Tavian Barnes2024-01-183-10/+124
| |
| * ioq: Refactor to take advantage of -WswitchTavian Barnes2024-01-181-71/+91
| |
| * stat: Expose bfs_{fstatat,statx}_flags()Tavian Barnes2024-01-182-21/+47
| |
| * stat: Expose bfs_stat{,x}_convert()Tavian Barnes2024-01-182-103/+121
| |
| * xspawn: Check for _POSIX_SPAWN in bfs_spawn_addfchdir()Tavian Barnes2024-01-171-1/+1
| |
| * fsade: Mark bfs_acl_tag_type() as maybe_unusedTavian Barnes2024-01-171-0/+1
| | | | | | | | | | It's not used on at least macOS, which doesn't have ACL_{USER,GROUP}_OBJ or ACL_OTHER.
| * ioq: Use the negative errno conventionTavian Barnes2024-01-135-26/+33
| |
| * bfstd: New {error,errno}_is_like() functionsTavian Barnes2024-01-135-21/+42
| | | | | | | | | | | | | | We used to have is_nonexistence_error() to consistently treat ENOENT and ENOTDIR the same. Recently, we started considering EFAULT the same as ENAMETOOLONG on DragonFly BSD to work around a kernel bug. Unify both of these behind a more generic interface.
| * config: Disable sys/acl.h on illumosTavian Barnes2024-01-091-1/+1
| | | | | | | | | | | | Their ACL API is quite a bit different from most. Link: https://illumos.org/man/2/acl
| * eval: Check for xbasename() allocation failureTavian Barnes2024-01-071-1/+8
| |
| * expr: Make expressions variadicTavian Barnes2024-01-078-890/+1719
| | | | | | | | | | | | | | | | | | 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.
| * list: New SLIST_HEAD() and SLIST_TAIL() macrosTavian Barnes2024-01-071-3/+40
| |
| * Work around DragonFly BSD kernel bugTavian Barnes2024-01-041-1/+13
| | | | | | | | | | | | | | | | | | DragonFly's x86_64 assembly implementation of copyinstr() checks the wrong pointer when deciding whether to return EFAULT or ENAMETOOLONG, causing it to always return EFAULT for overlong paths. Work around it by treating EFAULT the same as ENAMETOOLONG on DragonFly. Link: https://twitter.com/tavianator/status/1742991411203485713
| * fsade: Fix ACL checks on DragonFly BSDTavian Barnes2024-01-031-9/+45
| |
| * config: Disable xattrs on DragonFly BSDTavian Barnes2024-01-031-1/+1
| | | | | | | | DragonFly is missing extattr_get_link() and extattr_list_{file,link}().
| * config: Check for GCC >= 11 before using malloc attribute argsTavian Barnes2024-01-031-3/+3
| |
| * bit: Rename bswap{16,32,64}()Tavian Barnes2024-01-031-16/+16
| | | | | | | | | | NetBSD already defines this in <sys/bswap.h>, so pick names that don't conflict.
| * xspawn: Check for NetBSD 10 before using posix_spawn_..._fchdir()Tavian Barnes2024-01-021-1/+1
| |
| * config: Polyfill __NetBSD_Prereq__Tavian Barnes2024-01-021-0/+4
| |
| * config: Don't use target_clones on NetBSDTavian Barnes2024-01-021-1/+1
| |
| * pwcache: Fix uninitialized pointers on OpenBSDTavian Barnes2024-01-021-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | POSIX specifies that the get{pw,gr}*_r() functions store a NULL pointer to *result on error. However, OpenBSD does not always do this[1][2]: > if (bufsize < GETGR_R_SIZE_MAX) > return ERANGE; Work around it by explicitly initializing ret to NULL. [1]: https://github.com/openbsd/src/blob/e4829a9cc666f01ca5062d7fc15c20ab2d69229e/lib/libc/gen/getgrent.c#L135-L136 [2]: https://github.com/openbsd/src/blob/e4829a9cc666f01ca5062d7fc15c20ab2d69229e/lib/libc/gen/getgrent.c#L183-L184
| * bfstd: Fix fflags type on OpenBSDTavian Barnes2024-01-021-2/+8
| |
| * expr: Arena-allocate expressionsTavian Barnes2023-12-206-301/+210
| |
| * parse: s/parser_state/bfs_parser/Tavian Barnes2023-12-201-476/+476
| |
| * opt: Use more standard terminology for data flow domainsTavian Barnes2023-12-201-298/+294
| |
| * expr: Move some implementation into expr.cTavian Barnes2023-12-202-45/+56
| |
| * alloc: Add attr(nodiscard) to a few functionsTavian Barnes2023-12-201-0/+4
| |
| * config: Fix attr_nodiscard to use warn_unused_resultTavian Barnes2023-12-201-2/+2
| |
| * config: s/attr_format/attr_printf/Tavian Barnes2023-12-1810-29/+29
| |
| * config: New variadic attr(...) macroTavian Barnes2023-12-1817-62/+127
| |
| * bfstd: New xwcwidth() wrapperTavian Barnes2023-12-163-2/+7
| |
| * main: Warn if setlocale() failsTavian Barnes2023-12-161-1/+12
| | | | | | | | This should help users understand why issues like #128 happen.
| * parse: Reject integers that start with whitespaceTavian Barnes2023-12-091-1/+5
| |
| * bfstd: Wrap is[w]{alpha,digit,...}()Tavian Barnes2023-12-092-31/+62
| |
| * color: Make sure errno is non-zero if parse_colors() failsTavian Barnes2023-11-281-43/+43
| |
| * bfstd: Work around more instances of llvm/llvm-project#65532Tavian Barnes2023-11-231-14/+19
| |
| * darray: RemoveTavian Barnes2023-11-233-188/+0
| | | | | | | | | | The new RESERVE() macro from alloc.h is nicer, and handles alignment properly.
| * printf: Switch from darray to RESERVE()Tavian Barnes2023-11-231-175/+195
| |
| * mtab: Switch from darray to RESERVE()Tavian Barnes2023-11-231-23/+23
| |