From de5b0a16945758fd926ea8257a94eb1f15990bc3 Mon Sep 17 00:00:00 2001 From: Hongzhen Luo Date: Wed, 3 Jul 2024 11:03:27 +0800 Subject: [PATCH] erofs-utils: lib: change function definition of erofs_blocklist_open() Modify erofs_blocklist_open() to accept a file pointer instead of a file path, making it suitable for external use in liberofs. Signed-off-by: Hongzhen Luo Link: https://lore.kernel.org/r/20240703030327.3280503-1-hongzhen@linux.alibaba.com Signed-off-by: Gao Xiang --- include/erofs/block_list.h | 4 ++-- lib/block_list.c | 16 +++++++--------- mkfs/main.c | 20 +++++++++++++------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/include/erofs/block_list.h b/include/erofs/block_list.h index 9f9975e..7db4d0c 100644 --- a/include/erofs/block_list.h +++ b/include/erofs/block_list.h @@ -13,8 +13,8 @@ extern "C" #include "internal.h" -int erofs_blocklist_open(char *filename, bool srcmap); -void erofs_blocklist_close(void); +int erofs_blocklist_open(FILE *fp, bool srcmap); +FILE *erofs_blocklist_close(void); void tarerofs_blocklist_write(erofs_blk_t blkaddr, erofs_blk_t nblocks, erofs_off_t srcoff); diff --git a/lib/block_list.c b/lib/block_list.c index f47a746..261e9ff 100644 --- a/lib/block_list.c +++ b/lib/block_list.c @@ -13,23 +13,21 @@ static FILE *block_list_fp; bool srcmap_enabled; -int erofs_blocklist_open(char *filename, bool srcmap) +int erofs_blocklist_open(FILE *fp, bool srcmap) { - block_list_fp = fopen(filename, "w"); - - if (!block_list_fp) - return -errno; + if (!fp) + return -ENOENT; + block_list_fp = fp; srcmap_enabled = srcmap; return 0; } -void erofs_blocklist_close(void) +FILE *erofs_blocklist_close(void) { - if (!block_list_fp) - return; + FILE *fp = block_list_fp; - fclose(block_list_fp); block_list_fp = NULL; + return fp; } /* XXX: really need to be cleaned up */ diff --git a/mkfs/main.c b/mkfs/main.c index 321b8ac..bfd6d60 100644 --- a/mkfs/main.c +++ b/mkfs/main.c @@ -1133,6 +1133,7 @@ int main(int argc, char **argv) erofs_blk_t nblocks; struct timeval t; FILE *packedfile = NULL; + FILE *blklst = NULL; u32 crc; erofs_init_configure(); @@ -1174,10 +1175,12 @@ int main(int argc, char **argv) return 1; } - if (cfg.block_list_file && - erofs_blocklist_open(cfg.block_list_file, false)) { - erofs_err("failed to open %s", cfg.block_list_file); - return 1; + if (cfg.block_list_file) { + blklst = fopen(cfg.block_list_file, "w"); + if (!blklst || erofs_blocklist_open(blklst, false)) { + erofs_err("failed to open %s", cfg.block_list_file); + return 1; + } } #endif erofs_show_config(); @@ -1210,8 +1213,9 @@ int main(int argc, char **argv) erofstar.dev = rebuild_src_count + 1; if (erofstar.mapfile) { - err = erofs_blocklist_open(erofstar.mapfile, true); - if (err) { + blklst = fopen(erofstar.mapfile, "w"); + if (!blklst || erofs_blocklist_open(blklst, true)) { + err = -errno; erofs_err("failed to open %s", erofstar.mapfile); goto exit; } @@ -1417,7 +1421,9 @@ exit: erofs_iput(root); z_erofs_compress_exit(); z_erofs_dedupe_exit(); - erofs_blocklist_close(); + blklst = erofs_blocklist_close(); + if (blklst) + fclose(blklst); erofs_dev_close(&sbi); erofs_cleanup_compress_hints(); erofs_cleanup_exclude_rules(); -- 2.34.1