Hi Kelvin, On Tue, Dec 14, 2021 at 09:35:20AM -0800, Kelvin Zhang wrote: > Change-Id: Ia35708080a72ee204eaaddfc670d3cb8023a078c > Signed-off-by: Kelvin Zhang <[email protected]> > ---
In brief, I've taken some time to clean up / polish / enhance such logic and convert erofsfuse to use it: https://lore.kernel.org/linux-erofs/[email protected] PTAL and check if it helps your own scenario. I didn't update the original author name, also I updated the license into GPL-2.0+ OR Apache-2.0 dual license since Apache-2.0 is incompatible with GPL. If you have some other concerns, please drop me a word, thanks. Some minor comments below. > include/erofs/iterate.h | 46 ++++++++++++ > include/erofs_fs.h | 4 +- > lib/Makefile.am | 2 +- > lib/iterate.c | 154 ++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 203 insertions(+), 3 deletions(-) > create mode 100644 include/erofs/iterate.h > create mode 100644 lib/iterate.c > > diff --git a/include/erofs/iterate.h b/include/erofs/iterate.h > new file mode 100644 > index 0000000..4e2c783 > --- /dev/null > +++ b/include/erofs/iterate.h > @@ -0,0 +1,46 @@ > +// SPDX-License-Identifier: Apache-2.0 > + > +#ifndef ITERATE_ITERATE > +#define ITERATE_ITERATE > + > +#ifdef __cplusplus > +extern "C" > +{ > +#endif > + > + > +#include "erofs/io.h" > +#include "erofs/print.h" > + > + > +struct erofs_inode_info { > + const char* name; const char *name; > + enum erofs_ftype ftype; > + struct erofs_inode* inode; struct erofs_inode *inode; > + void* arg; > +}; > +// Callback function for iterating over inodes of EROFS > + > +typedef bool (*erofs_readdir_cb)(struct erofs_inode_info*); > + > +// Iterate over inodes that are in directory specified by |nid|. > +// |parent_nid| is optional, if specified, additional sanity checks will > +// be performed. > +// |cb| will be called for every inode, regardless of type of inode. > +// |arg| will be passed to the callback in |erofs_readdir_cb| struct's > +// |arg| field. erofs-utils follows linux kernel coding style, so apart from SPDX, it'd be better to use C-style comments only. Also you could run scripts/checkpatch.pl in advance to avoid most style problems.. I'd be many thanks if code could follow the correct coding style, so I could have much less extra work to do. > +int erofs_iterate_dir(const struct erofs_sb_info* sbi, > + > erofs_nid_t nid, > + > erofs_nid_t parent_nid, > + > erofs_readdir_cb cb, > + void* > arg); 1 tab equals to 8 spaces in the kernel coding style. So the indentation is somewhat weird for me. Thanks, Gao Xiang
