Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | xtime: Call tzset() from main() instead of lazily | Tavian Barnes | 2024-03-07 | 1 | -1/+1 |
| | | | | | | | | | | | | | 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 | ||||
* | eval: Tweak status bar punctuation | Tavian Barnes | 2024-03-06 | 1 | -1/+1 |
| | |||||
* | eval: Add thousands separators to -status | Tavian Barnes | 2024-02-12 | 1 | -2/+2 |
| | |||||
* | sanity: Don't use self-init for uninit() | Tavian Barnes | 2024-02-12 | 1 | -1/+1 |
| | | | | | | | | | | | 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 earlier | Tavian Barnes | 2024-02-06 | 1 | -19/+2 |
| | |||||
* | bftw: stat() files asynchronously | Tavian Barnes | 2024-02-06 | 1 | -10/+10 |
| | |||||
* | eval: Squelch an uninitialized variable warning | Tavian Barnes | 2024-01-22 | 1 | -1/+3 |
| | |||||
* | bfstd: New {error,errno}_is_like() functions | Tavian Barnes | 2024-01-13 | 1 | -1/+1 |
| | | | | | | | 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. | ||||
* | eval: Check for xbasename() allocation failure | Tavian Barnes | 2024-01-07 | 1 | -1/+8 |
| | |||||
* | expr: Make expressions variadic | Tavian Barnes | 2024-01-07 | 1 | -31/+24 |
| | | | | | | | | | 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. | ||||
* | config: s/attr_format/attr_printf/ | Tavian Barnes | 2023-12-18 | 1 | -1/+1 |
| | |||||
* | config: New variadic attr(...) macro | Tavian Barnes | 2023-12-18 | 1 | -1/+1 |
| | |||||
* | bfstd: New xwcwidth() wrapper | Tavian Barnes | 2023-12-16 | 1 | -1/+1 |
| | |||||
* | ctx: Switch paths from darray to RESERVE() | Tavian Barnes | 2023-11-23 | 1 | -2/+1 |
| | |||||
* | eval: Remove Cosmopolitan-specific workaround | Tavian Barnes | 2023-11-13 | 1 | -3/+1 |
| | | | | | | | Turns out this is not specific to Cosmopolitan, it's a recent Linux behaviour change. Link: https://lore.kernel.org/linux-fsdevel/20231113180616.2831430-1-tavianator@tavianator.com/ | ||||
* | Initial support for Cosmopolitan Libc | Tavian Barnes | 2023-11-10 | 1 | -1/+3 |
| | |||||
* | config: s/BFS_FORMATTER/attr_format/ | Tavian Barnes | 2023-11-09 | 1 | -1/+1 |
| | |||||
* | ctx: Store the original and current RLIMIT_NOFILE | Tavian Barnes | 2023-11-06 | 1 | -14/+19 |
| | |||||
* | bfstd: Expose rlim_cmp() | Tavian Barnes | 2023-11-06 | 1 | -33/+0 |
| | |||||
* | Use {0} to initialize mbstate_t rather than memset() | Tavian Barnes | 2023-10-27 | 1 | -2/+1 |
| | |||||
* | eval: TTY-escape paths in the status bar | Tavian Barnes | 2023-10-27 | 1 | -4/+8 |
| | |||||
* | bfstd: Expose xmbrtowc() and use it in eval_status() | Tavian Barnes | 2023-10-27 | 1 | -24/+15 |
| | |||||
* | bftw: New flag to control whiteout visibility | Tavian Barnes | 2023-10-17 | 1 | -0/+1 |
| | |||||
* | dir: Add a flags parameter to bfs_opendir() | Tavian Barnes | 2023-10-17 | 1 | -3/+3 |
| | |||||
* | bfstd: Add a thread-safe wrapper for strerror() | Tavian Barnes | 2023-10-05 | 1 | -1/+1 |
| | |||||
* | Formatting fixes | Tavian Barnes | 2023-09-27 | 1 | -8/+7 |
| | |||||
* | dstring: New dchar typedef for dynamic strings | Tavian Barnes | 2023-09-26 | 1 | -2/+2 |
| | |||||
* | eval: Don't oversubscribe the CPU by default | Tavian Barnes | 2023-07-11 | 1 | -3/+3 |
| | |||||
* | Use strcmp() instead of fnmatch() if possible | Tavian Barnes | 2023-07-06 | 1 | -4/+17 |
| | |||||
* | dir: Arena-allocate directories | Tavian Barnes | 2023-06-20 | 1 | -12/+22 |
| | |||||
* | eval: Pre-allocate the highest fd | Tavian Barnes | 2023-06-13 | 1 | -0/+18 |
| | | | | | | This avoids the need to grow the fd table during the search, significantly reducing kernel contention when opening directories in parallel. | ||||
* | bftw: Use an I/O queue to open directories | Tavian Barnes | 2023-06-13 | 1 | -0/+22 |
| | | | | Parallelism is controlled by the new -j flag. | ||||
* | eval: For -ls, track the longest user/group names to keep alignment | Tavian Barnes | 2023-06-08 | 1 | -20/+26 |
| | |||||
* | eval: Print non-path -ls text in the "normal" color, like ls -l | Tavian Barnes | 2023-06-08 | 1 | -1/+6 |
| | |||||
* | Switch from assert() to bfs_assert()/bfs_verify() | Tavian Barnes | 2023-05-18 | 1 | -6/+5 |
| | |||||
* | Use bfs_bug("...") over assert(!"...") | Tavian Barnes | 2023-05-18 | 1 | -3/+3 |
| | |||||
* | config: s/BFS_FALLTHROUGH/fallthru/ | Tavian Barnes | 2023-05-10 | 1 | -2/+2 |
| | |||||
* | style: Don't use tabs to indent preprocessor directives | Tavian Barnes | 2023-05-03 | 1 | -11/+11 |
| | |||||
* | Replace license boilerplate with SPDX tags | Tavian Barnes | 2023-01-25 | 1 | -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/ | ||||
* | mtab: Keep parent dirs open during fill_types() | Tavian Barnes | 2023-01-25 | 1 | -0/+5 |
| | |||||
* | bfstd: New wrappers for dirname()/basename() | Tavian Barnes | 2023-01-19 | 1 | -9/+1 |
| | |||||
* | Turn on more aggressive format string warnings | Tavian Barnes | 2022-12-09 | 1 | -3/+5 |
| | |||||
* | expr: Rename bfs_expr_has_children() to _is_parent() | Tavian Barnes | 2022-12-05 | 1 | -2/+2 |
| | |||||
* | expr: Don't use reftime for -ls | Tavian Barnes | 2022-11-17 | 1 | -1/+1 |
| | | | | | reftime is part of a different union than the print actions are supposed to use. | ||||
* | Try to report I/O errors earlier and only once | Tavian Barnes | 2022-11-10 | 1 | -5/+19 |
| | |||||
* | pwcache: Fill the user/group caches lazily | Tavian Barnes | 2022-11-09 | 1 | -15/+10 |
| | | | | | | | Iterating all the users/groups can be expensive, especially with NSS. Android has so many that it doesn't even return them all from get{pw,gr}ent() for performance reasons, leading to incorrect behaviour of -user/-group/etc. | ||||
* | eval: Add missing flag to -D stat | Tavian Barnes | 2022-11-08 | 1 | -0/+1 |
| | |||||
* | bfstd: Rename from util and reorganize it | Tavian Barnes | 2022-11-06 | 1 | -3/+3 |
| | |||||
* | config: Split out some of util.h into a new header | Tavian Barnes | 2022-11-06 | 1 | -0/+1 |
| | |||||
* | parse: They're called "primary expressions," not "literals" | Tavian Barnes | 2022-07-05 | 1 | -1/+1 |
| |