summaryrefslogtreecommitdiffstats
path: root/parse.c
Commit message (Collapse)AuthorAgeFilesLines
* passwd: Cache the user/group tablesTavian Barnes2020-02-291-6/+44
| | | | | | | | | | | | | | | | | | | | | | This is a significant optimization for conditions that need these tables: Benchmark #1: ./bfs ~/code/linux -nouser >/dev/null Time (mean ± σ): 232.0 ms ± 2.5 ms [User: 44.3 ms, System: 185.0 ms] Range (min … max): 228.7 ms … 238.7 ms 12 runs Benchmark #2: ./bfs-1.6 ~/code/linux -nouser >/dev/null Time (mean ± σ): 1.050 s ± 0.012 s [User: 544.2 ms, System: 500.0 ms] Range (min … max): 1.025 s … 1.063 s 10 runs Benchmark #3: find ~/code/linux -nouser >/dev/null Time (mean ± σ): 1.040 s ± 0.012 s [User: 533.6 ms, System: 500.6 ms] Range (min … max): 1.017 s … 1.054 s 10 runs Summary './bfs ~/code/linux -nouser >/dev/null' ran 4.48 ± 0.07 times faster than 'find ~/code/linux -nouser >/dev/null' 4.52 ± 0.07 times faster than './bfs-1.6 ~/code/linux -nouser >/dev/null'
* parse: Give -ls and -fls an ephemeral FD for getpwuid()/getgrgid()Tavian Barnes2020-02-291-0/+2
| | | | | | Similar to 9009456c, those functions may open /etc/{passwd,group}, so they need an FD available. Right now, -ls on large trees eventually starts printing numeric IDs instead of usernames/group names.
* parse: Don't return success for invalid parse_int() calls with -DNDEBUGTavian Barnes2020-02-251-2/+2
|
* time: Split out time-related functions from utilTavian Barnes2020-02-131-145/+14
|
* parse: Handle 1969-12-31T23:59:59ZTavian Barnes2020-02-131-13/+14
| | | | | mktime() returns -1 on error, but also for one second before the epoch. Compare the input against localtime(-1) to distinguish those cases.
* Implement -{a,B,c,m,}sinceTavian Barnes2020-02-121-20/+52
|
* parse: Set tm_isdst to -1Tavian Barnes2020-02-121-1/+3
| | | | | This is required by POSIX to ensure the mktime() determines itself whether DST is in effect.
* parse: Work around missing `timezone` on FreeBSDTavian Barnes2020-02-121-0/+5
| | | | | FreeBSD has a function timezone() that conflicts with the global variable, despite that being specified by POSIX. Use tm_gmtoff instead.
* Implement explicit reference times (-newerXt)Tavian Barnes2020-02-111-3/+177
|
* parse: Add a missing NULL check for trie_insert_mem()Tavian Barnes2020-01-221-0/+5
|
* Update documentation for the -mount/-xdev revertTavian Barnes2019-09-141-1/+2
|
* parse: Don't treat -mount differently from -xdev yetTavian Barnes2019-09-111-1/+8
| | | | | | | | The new POSIX version with -mount isn't out yet, so there's no point in conforming to a non-existent document while breaking compatibility with GNU find, which hasn't changed yet either. But a warning is added for the future incompatibility. This patch can be reverted to re-enable the feature.
* darray: New dynamic array libraryTavian Barnes2019-08-291-16/+5
|
* Make -mount and -xdev documentation alphabeticalTavian Barnes2019-07-051-3/+3
|
* Make -mount and -xdev do different thingsTavian Barnes2019-07-041-13/+38
| | | | | | | | | POSIX now says -mount should skip the whole mount point, while -xdev should only skip its descendents. C.f. http://austingroupbugs.net/view.php?id=1133 C.f. https://savannah.gnu.org/bugs/?42318 C.f. https://savannah.gnu.org/bugs/?54745
* parse: Add costs for -*able testsTavian Barnes2019-06-271-2/+18
|
* parse: Reorder table_entry to avoid needing to specify prefix=falseTavian Barnes2019-06-251-101/+101
|
* parse: Sort the parse tableTavian Barnes2019-06-161-6/+6
|
* parse: Reject unknown search strategiesTavian Barnes2019-06-041-1/+17
|
* parse: Use -S {bfs,dfs,ids} rather than -{bfs,dfs,ids}Tavian Barnes2019-06-041-14/+29
|
* Add documentation for -bfs/-dfs/-idsTavian Barnes2019-06-031-1/+5
|
* parse: Pipe bfs -help to a pager when interactiveTavian Barnes2019-05-311-3/+125
|
* parse: Fix some line wrappingTavian Barnes2019-05-311-2/+2
|
* Implement an iterative deepening mode (-ids)Tavian Barnes2019-05-291-1/+5
|
* Implement a depth-first mode (-dfs)Tavian Barnes2019-05-281-0/+26
|
* bftw: Visit multiple roots breadth-firstTavian Barnes2019-05-281-24/+18
| | | | This makes `bfs a b` treat `a` and `b` as siblings.
* Add documentation for -xattrTavian Barnes2019-05-241-4/+8
|
* Implement -xattr predicateTavian Barnes2019-05-241-0/+18
|
* fsade: Refactor the POSIX.1e abstractionsTavian Barnes2019-05-241-7/+5
| | | | | | | Since we're going to want to abstract more things that aren't part of POSIX.1e (like xattrs) in a similar way, let's give this a more generic name. And while we're at it, give it some more precise error reporting, and add some tests.
* stat: Get rid of bfs_fstat()Tavian Barnes2019-05-041-1/+1
| | | | We can just use bfs_stat() with a NULL at_path.
* stat: Unify the flags argumentsTavian Barnes2019-05-041-2/+2
|
* Add support for the NO_COLOR environment variableTavian Barnes2019-04-271-4/+10
| | | | C.f. https://no-color.org/
* parse: Add some missing costs/probabilitiesTavian Barnes2019-04-241-0/+4
| | | | Previously we weren't re-ordering -type in front of -newerXY
* parse: Allow things like -uid ++10Tavian Barnes2019-04-211-3/+9
| | | | GNU find does too.
* trie: Make trie_remove() take a leaf instead of a keyTavian Barnes2019-04-201-2/+2
|
* trie: Store void* values rather than const void*Tavian Barnes2019-03-271-2/+2
| | | | Fewer casts needed this way.
* bftw: Work around d_type being wrong for bind mounts on LinuxTavian Barnes2019-03-061-5/+8
| | | | | | C.f. https://savannah.gnu.org/bugs/?54913 C.f. https://lkml.org/lkml/2019/2/11/2027 Fixes https://github.com/tavianator/bfs/issues/37
* parse: Use a trie to hold currently open filesTavian Barnes2019-03-061-21/+18
|
* Implement -uniqueTavian Barnes2019-03-011-3/+23
| | | | Closes #48
* parse: Wrap -help output at 80 charsTavian Barnes2019-02-131-3/+4
|
* Fix missing color escape ($) in the -help outputTavian Barnes2019-02-121-1/+1
|
* Add some documentation commentsTavian Barnes2019-02-091-0/+7
|
* Re-write the help/manpageTavian Barnes2019-02-061-164/+125
| | | | | | I'm not sure people care very much whether the functionality they're looking up originated in POSIX/BSD/GNU find (and if they do, they can check those docs).
* parse: Treat -d as a flag, not an optionTavian Barnes2019-02-061-2/+2
| | | | | | This is consistent with BSD find, not with GNU find. But the GNU find feature was an (incorrect) attempt to be compatible with BSD find anyway.
* parse: Add support for whiteouts in -type/-xtypeTavian Barnes2019-02-061-0/+4
| | | | FreeBSD find supports this.
* Fix -nouser/-nogroup error handlingTavian Barnes2019-02-061-0/+2
| | | | | | | | | | The proper way to check for nonexistent users/groups is to set errno to 0 before the get{grg,pwu}id() call, and check it afterwards. On doing this, it becomes obvious that the call can fail if bftw() is using all the available FDs, so give them some ephemeral FDs. It would be ideal to read the user/group table only once, but this fixes the bug for now.
* parse: Remove the recommendation to check find -help or man findTavian Barnes2019-02-011-6/+3
| | | | bfs has had a comprehensive help text and man page for a while now.
* parse: Allow multiple comma-separated debug flagsTavian Barnes2019-01-111-46/+81
|
* posix1e: Don't #include <sys/capability.h> on FreeBSDTavian Barnes2019-01-031-0/+1
| | | | | | | | The file is there by default, but deprecated and not a POSIX.1E implementation. While I'm at it, move the logic to posix1e.h so other files aren't burdened with an extra include. Fixes the other half of #40.
* color: Check format strings + args for cfprintf()Tavian Barnes2019-01-021-219/+221
| | | | | | %{cc} is now ${cc} to avoid warnings about an unrecognized format specifier, and %P and %L are now %pP and %pL to make them look more like standard format strings.