Hi He,

On Mon, Jul 11, 2022 at 10:47:17AM +0800, Li He wrote:
> Add --offset to erofsfuse to skip bytes at the start of the image file.
> 
> Signed-off-by: Li He <l...@uniontech.com>

Thanks for the patch! The patch roughly looks good to me,
some nit as below..

> ---
>  fuse/main.c            | 6 ++++++
>  include/erofs/config.h | 3 +++
>  lib/io.c               | 2 ++
>  3 files changed, 11 insertions(+)
> 
> diff --git a/fuse/main.c b/fuse/main.c
> index f4c2476..a2a6449 100644
> --- a/fuse/main.c
> +++ b/fuse/main.c
> @@ -151,6 +151,7 @@ static struct fuse_operations erofs_ops = {
>  static struct options {
>       const char *disk;
>       const char *mountpoint;
> +     u64 offset;

We can use cfg.c_offset directly instead it seems?

>       unsigned int debug_lvl;
>       bool show_help;
>       bool odebug;
> @@ -158,6 +159,7 @@ static struct options {
>  
>  #define OPTION(t, p) { t, offsetof(struct options, p), 1 }
>  static const struct fuse_opt option_spec[] = {
> +     OPTION("--offset=%lu", offset),
>       OPTION("--dbglevel=%u", debug_lvl),
>       OPTION("--help", show_help),
>       FUSE_OPT_KEY("--device=", 1),
> @@ -170,6 +172,7 @@ static void usage(void)
>  
>       fputs("usage: [options] IMAGE MOUNTPOINT\n\n"
>             "Options:\n"
> +           "    --offset=#             # bytes to skip when read IMAGE\n"

need to update manpage as well...

Thanks,
Gao Xiang

>             "    --dbglevel=#           set output message level to # 
> (maximum 9)\n"
>             "    --device=#             specify an extra device to be used 
> together\n"
>  #if FUSE_MAJOR_VERSION < 3
> @@ -190,6 +193,7 @@ static void usage(void)
>  static void erofsfuse_dumpcfg(void)
>  {
>       erofs_dump("disk: %s\n", fusecfg.disk);
> +     erofs_dump("offset: %lu\n", fusecfg.offset);
>       erofs_dump("mountpoint: %s\n", fusecfg.mountpoint);
>       erofs_dump("dbglevel: %u\n", cfg.c_dbg_lvl);
>  }
> @@ -279,6 +283,8 @@ int main(int argc, char *argv[])
>       if (fusecfg.odebug && cfg.c_dbg_lvl < EROFS_DBG)
>               cfg.c_dbg_lvl = EROFS_DBG;
>  
> +     cfg.c_offset = fusecfg.offset;
> +
>       erofsfuse_dumpcfg();
>       ret = dev_open_ro(fusecfg.disk);
>       if (ret) {
> diff --git a/include/erofs/config.h b/include/erofs/config.h
> index 0d0916c..8b6f7db 100644
> --- a/include/erofs/config.h
> +++ b/include/erofs/config.h
> @@ -73,6 +73,9 @@ struct erofs_configure {
>       char *fs_config_file;
>       char *block_list_file;
>  #endif
> +
> +     /* offset when read mutli partiton image */
> +     u64 c_offset;
>  };
>  
>  extern struct erofs_configure cfg;
> diff --git a/lib/io.c b/lib/io.c
> index 9c663c5..524cfb4 100644
> --- a/lib/io.c
> +++ b/lib/io.c
> @@ -261,6 +261,8 @@ int dev_read(int device_id, void *buf, u64 offset, size_t 
> len)
>       if (cfg.c_dry_run)
>               return 0;
>  
> +     offset += cfg.c_offset;
> +
>       if (!buf) {
>               erofs_err("buf is NULL");
>               return -EINVAL;
> -- 
> 2.20.1
> 
> 

Reply via email to