diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2020-09-18 17:34:03 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2020-09-18 17:34:03 -0400 |
commit | ccf75c74bdac06eec97a2a6a5228c2e706c121bd (patch) | |
tree | 0e9b682bbdf15f9da668f7fe343a19ed17371b74 /bftw.h | |
parent | 0aa71f890777d2aaddeca53384b94742e4b2678b (diff) | |
download | bfs-ccf75c74bdac06eec97a2a6a5228c2e706c121bd.tar.xz |
Don't call stat() just to determine symbolic lengths
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.
Diffstat (limited to 'bftw.h')
-rw-r--r-- | bftw.h | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -131,6 +131,19 @@ struct BFTW { const struct bfs_stat *bftw_stat(const struct BFTW *ftwbuf, enum bfs_stat_flag flags); /** + * Get bfs_stat() info for a file encountered during bftw(), if it has already + * been cached. + * + * @param ftwbuf + * bftw() data for the file to stat. + * @param flags + * flags for bfs_stat(). Pass ftwbuf->stat_flags for the default flags. + * @return + * A pointer to a bfs_stat() buffer, or NULL if no stat info is cached. + */ +const struct bfs_stat *bftw_cached_stat(const struct BFTW *ftwbuf, enum bfs_stat_flag flags); + +/** * Get the type of a file encountered during bftw(), with flags controlling * whether to follow links. This function will avoid calling bfs_stat() if * possible. |