Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | spawn: Fix error pipe write failure handling | Tavian Barnes | 2020-11-04 | 1 | -1/+8 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A short history lesson: this code (from exec.c) used to just be write(...); In 649d85b, an empty if block was added to placate _FORTIFY_SOURCE's warn_unused_result: if (write(...) != sizeof(error)) { // ... } This is fine since the parent doesn't rely on receiving those writes (e.g. the child could die before writing), and the small write to a pipe won't fail anyway. But when bfs_spawn() was created, the implementation changed to this: while (write(...) < sizeof(error)); The while loop was presumably added to mirror musl's posix_spawn() implementation, which handles EINTR. But musl's is actually correct: while (write(...) < 0); whereas mine has a subtle bug: since sizeof(error) is unsigned, the bfs code did an unsigned comparison, meaning -1 from write() would *not* restart the loop. Fix it by comparing with 0 like musl, since short writes are impossible here. Perhaps it's time for -Wsign-compare, despite the other 18 instances being false positives. | |||||
* | Makefile: Fail early on sanitizer errors | Tavian Barnes | 2020-11-03 | 1 | -0/+8 | |
| | ||||||
* | New -status option to display a status bar | Tavian Barnes | 2020-11-03 | 5 | -14/+122 | |
| | ||||||
* | bar: Implement terminal status bars | Tavian Barnes | 2020-11-03 | 3 | -0/+320 | |
| | ||||||
* | dstring: New dstrvprintf() function | Tavian Barnes | 2020-11-03 | 2 | -9/+28 | |
| | ||||||
* | Update the project URL | Tavian Barnes | 2020-10-14 | 2 | -2/+2 | |
| | ||||||
* | Release 2.02.0 | Tavian Barnes | 2020-10-14 | 3 | -3/+7 | |
| | ||||||
* | util: New BFS_FLEX_SIZEOF() macro for more precise flexible array allocations | Tavian Barnes | 2020-10-13 | 4 | -4/+28 | |
| | | | | | See http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_282.htm for all the fun behind this. | |||||
* | pwcache: Adjust some naming conventions | Tavian Barnes | 2020-10-06 | 3 | -14/+14 | |
| | ||||||
* | mtab: Adjust some naming conventions | Tavian Barnes | 2020-10-06 | 3 | -7/+7 | |
| | ||||||
* | expr, eval: Clean up header dependencies | Tavian Barnes | 2020-10-06 | 3 | -19/+23 | |
| | ||||||
* | exec: Adjust some calling conventions | Tavian Barnes | 2020-10-06 | 3 | -11/+11 | |
| | ||||||
* | printf: Adjust some calling conventions | Tavian Barnes | 2020-10-06 | 3 | -22/+22 | |
| | ||||||
* | ctx: Don't include color.h | Tavian Barnes | 2020-10-06 | 1 | -4/+4 | |
| | ||||||
* | diag: New bfs_perror() function | Tavian Barnes | 2020-10-05 | 6 | -37/+53 | |
| | ||||||
* | parse: Fail if -color is passed and the colors couldn't be parsed | Tavian Barnes | 2020-10-04 | 3 | -0/+13 | |
| | ||||||
* | parse: More accurate error reporting for cfdup() | Tavian Barnes | 2020-10-04 | 1 | -1/+7 | |
| | ||||||
* | parse: Report errors when failing to add a root | Tavian Barnes | 2020-10-04 | 1 | -1/+5 | |
| | ||||||
* | diag: Factor debug_flag string conversion into its own function | Tavian Barnes | 2020-10-04 | 1 | -25/+21 | |
| | ||||||
* | time: Don't call tzset() on every x{local,gm}time() | Tavian Barnes | 2020-10-01 | 1 | -2/+11 | |
| | | | | It turns out tzset() checks /etc/localtime every time you call it. | |||||
* | dstring: Try to avoid calling vsnprintf() twice in dstrprintf() | Tavian Barnes | 2020-10-01 | 1 | -10/+26 | |
| | ||||||
* | main: Preserve errno over close() in redirect() | Tavian Barnes | 2020-10-01 | 1 | -6/+7 | |
| | ||||||
* | util: Move redirect() and isopen() to main.c | Tavian Barnes | 2020-10-01 | 3 | -48/+22 | |
| | ||||||
* | util: Don't rely on bftw | Tavian Barnes | 2020-09-30 | 4 | -40/+39 | |
| | | | | And rename format_mode() to xstrmode() while I'm at it. | |||||
* | ctx: Perserve errno better in bfs_ctx_open() | Tavian Barnes | 2020-09-28 | 1 | -0/+7 | |
| | ||||||
* | Rename struct cmdline to bfs_ctx | Tavian Barnes | 2020-09-27 | 18 | -562/+786 | |
| | | | | | The API remains similar, with some added accessor functions for lazy initialization of the pwcache and mtab. | |||||
* | exec: Output a human-readable description of terminating signals | Tavian Barnes | 2020-09-23 | 1 | -1/+5 | |
| | ||||||
* | bftw: Fix bftw_cached_stat() with BFS_STAT_TRYFOLLOW | Tavian Barnes | 2020-09-20 | 1 | -1/+5 | |
| | ||||||
* | tests: Add missing ground truth | Tavian Barnes | 2020-09-20 | 1 | -0/+12 | |
| | ||||||
* | printf: Format the empty string for %l of non-links | Tavian Barnes | 2020-09-20 | 2 | -9/+15 | |
| | | | | It makes a difference if the format specifier has a width. | |||||
* | stat: Rename bfs_stat_flag to _flags | Tavian Barnes | 2020-09-18 | 7 | -23/+23 | |
| | | | | Flags enums should be plural. | |||||
* | Don't call stat() just to determine symbolic lengths | Tavian Barnes | 2020-09-18 | 5 | -11/+30 | |
| | | | | | | | The new bftw_cached_stat() helper gets us stat info if we already have it, but doesn't call stat() if we don't. In that case we just take a guess for the initial length to readlinkat(). This lets us avoid stat() entirely in many cases for -lname and -printf %l. | |||||
* | util: Make the initial allocation bigger for xreadlinkat() | Tavian Barnes | 2020-09-18 | 1 | -1/+6 | |
| | | | | | | | | | Most symlinks are more than 1 character long, so rather than wasting time with 1, 2, 4, ... when we don't have a good guess for the length, start with a bigger one. Credit to https://twitter.com/RichFelker/status/1306321019108556806 for reminding me of this. | |||||
* | pwcache: Fix an invalid free if strdup()ing the group name fails | Tavian Barnes | 2020-09-02 | 1 | -3/+4 | |
| | ||||||
* | pwcache: Work around gr_mem being misaligned on macOS | Tavian Barnes | 2020-08-13 | 1 | -3/+14 | |
| | | | | C.f. https://github.com/php/php-src/commit/d80f0ff6c0a557d8c993a9d2bd006fb488f6d564 | |||||
* | Implement -xattrname | Tavian Barnes | 2020-08-13 | 12 | -20/+159 | |
| | | | | From macOS find. | |||||
* | bftw: Make some flag names more explicit | Tavian Barnes | 2020-07-29 | 4 | -36/+36 | |
| | ||||||
* | bftw: Rename bftw_typeflag to bftw_type, and make it not a bitmask | Tavian Barnes | 2020-07-29 | 9 | -107/+106 | |
| | ||||||
* | Update default branch to 'main' | Tavian Barnes | 2020-07-10 | 1 | -2/+2 | |
| | ||||||
* | eval: Fix an assertion failure with -D search -s | Tavian Barnes | 2020-06-16 | 1 | -0/+1 | |
| | ||||||
* | eval: Fix a segfault with -D search -S eds | Tavian Barnes | 2020-06-16 | 1 | -0/+1 | |
| | ||||||
* | Implement exponential deepening search | Tavian Barnes | 2020-06-16 | 6 | -31/+114 | |
| | ||||||
* | bftw: Factor out some of the iterative deepening harness | Tavian Barnes | 2020-06-12 | 1 | -39/+65 | |
| | ||||||
* | bftw: Only do another level of deepening if there are unexplored directories | Tavian Barnes | 2020-06-12 | 1 | -3/+4 | |
| | | | | This makes -S ids about 20% faster on a checkout of the Linux kernel. | |||||
* | bftw: Make iterative deepening actually do depth-first search | Tavian Barnes | 2020-06-12 | 1 | -15/+21 | |
| | | | | | | | | | bftw_stream() was always pushing to the end of the queue, resulting in breadth-first behaviour even when BFTW_DFS was set. This made iterative deepening a "worst of both worlds" with the same memory use as BFS, but much slower due to re-traversals. Fix it by re-using bftw_batch_{start,finish} from bftw_batch(). | |||||
* | tests/trie: New acceptance test for tries | Tavian Barnes | 2020-06-09 | 3 | -4/+129 | |
| | ||||||
* | tests/xtimegm: Don't test the year 1900 | Tavian Barnes | 2020-06-09 | 1 | -1/+1 | |
| | | | | | | | macOS doesn't support negative time_t's that are larger than 32 bits apparently. C.f.: https://stackoverflow.com/a/46335905 | |||||
* | tests: New acceptance test for xtimegm() | Tavian Barnes | 2020-06-09 | 3 | -3/+101 | |
| | ||||||
* | RELEASES.md: Fix a bad issue link | Tavian Barnes | 2020-06-08 | 1 | -2/+2 | |
| | ||||||
* | RELEASES.md: Use short links for issues consistently | Tavian Barnes | 2020-06-08 | 1 | -4/+11 | |
| |