Reviewed-by Joao Marcos Costa <[email protected]> Em ter., 3 de nov. de 2020 às 08:12, Richard Genoud < [email protected]> escreveu:
> This permits to find a file and use the distro_bootcmd > > Signed-off-by: Richard Genoud <[email protected]> > --- > fs/fs.c | 2 +- > fs/squashfs/sqfs.c | 38 ++++++++++++++++++++++++++++++++++++++ > include/squashfs.h | 1 + > 3 files changed, 40 insertions(+), 1 deletion(-) > > diff --git a/fs/fs.c b/fs/fs.c > index fb27c910d4f..7a4020607a3 100644 > --- a/fs/fs.c > +++ b/fs/fs.c > @@ -296,7 +296,7 @@ static struct fstype_info fstypes[] = { > .size = sqfs_size, > .close = sqfs_close, > .closedir = sqfs_closedir, > - .exists = fs_exists_unsupported, > + .exists = sqfs_exists, > .uuid = fs_uuid_unsupported, > .write = fs_write_unsupported, > .ln = fs_ln_unsupported, > diff --git a/fs/squashfs/sqfs.c b/fs/squashfs/sqfs.c > index a96c1d4f564..c8e8d682cd4 100644 > --- a/fs/squashfs/sqfs.c > +++ b/fs/squashfs/sqfs.c > @@ -1657,6 +1657,44 @@ free_strings: > return ret; > } > > +int sqfs_exists(const char *filename) > +{ > + struct fs_dir_stream *dirsp = NULL; > + struct squashfs_dir_stream *dirs; > + char *dir, *file; > + struct fs_dirent *dent; > + int ret; > + > + sqfs_split_path(&file, &dir, filename); > + /* > + * sqfs_opendir will uncompress inode and directory tables, and > will > + * return a pointer to the directory that contains the requested > file. > + */ > + ret = sqfs_opendir(dir, &dirsp); > + if (ret) { > + ret = -EINVAL; > + goto free_strings; > + } > + > + dirs = (struct squashfs_dir_stream *)dirsp; > + > + while (!sqfs_readdir(dirsp, &dent)) { > + ret = strcmp(dent->name, file); > + if (!ret) > + break; > + free(dirs->entry); > + dirs->entry = NULL; > + } > + > + sqfs_closedir(dirsp); > + > +free_strings: > + free(dir); > + free(file); > + > + return ret == 0; > +} > + > void sqfs_close(void) > { > free(ctxt.sblk); > diff --git a/include/squashfs.h b/include/squashfs.h > index 819cf8c2da8..7489eefa1f2 100644 > --- a/include/squashfs.h > +++ b/include/squashfs.h > @@ -19,6 +19,7 @@ int sqfs_probe(struct blk_desc *fs_dev_desc, > int sqfs_read(const char *filename, void *buf, loff_t offset, > loff_t len, loff_t *actread); > int sqfs_size(const char *filename, loff_t *size); > +int sqfs_exists(const char *filename); > void sqfs_close(void); > void sqfs_closedir(struct fs_dir_stream *dirs); > > -- Atenciosamente, João Marcos Costa www.linkedin.com/in/jmarcoscosta/ https://github.com/jmarcoscosta

