On 2023/6/15 18:46, Gao Xiang wrote:


On 2023/6/15 18:17, Guo Xuenan via Linux-erofs wrote:
{dump,fsck}.erofs use the same compressor print function,
available compressors means which algothrims are currently
supported by binary tools.
supported compressors including all algothrims that are ready
for your erofs binary tools.

Signed-off-by: Guo Xuenan <guoxue...@huawei.com>
---
  fsck/main.c              | 15 +-----------
  include/erofs/compress.h |  3 ++-
  lib/compressor.c         | 51 ++++++++++++++++++++++++++--------------
  mkfs/main.c              | 15 +-----------
  4 files changed, 38 insertions(+), 46 deletions(-)

diff --git a/fsck/main.c b/fsck/main.c
index f816bec..e559050 100644
--- a/fsck/main.c
+++ b/fsck/main.c
@@ -49,19 +49,6 @@ static struct option long_options[] = {
      {0, 0, 0, 0},
  };
  -static void print_available_decompressors(FILE *f, const char *delim)
-{
-    unsigned int i = 0;
-    const char *s;
-
-    while ((s = z_erofs_list_available_compressors(i)) != NULL) {
-        if (i++)
-            fputs(delim, f);
-        fputs(s, f);
-    }
-    fputc('\n', f);
-}
-
  static void usage(void)
  {
      fputs("usage: [options] IMAGE\n\n"
@@ -84,7 +71,7 @@ static void usage(void)
            " --no-preserve-owner    extract as yourself\n"
            " --no-preserve-perms    apply user's umask when extracting permissions\n"
            "\nSupported algorithms are: ", stderr);
-    print_available_decompressors(stderr, ", ");
+    erofs_print_available_compressors(stderr);
  }
    static void erofsfsck_print_version(void)
diff --git a/include/erofs/compress.h b/include/erofs/compress.h
index 08af9e3..f1b9bbd 100644
--- a/include/erofs/compress.h
+++ b/include/erofs/compress.h
@@ -22,7 +22,8 @@ int erofs_write_compressed_file(struct erofs_inode *inode, int fd);
  int z_erofs_compress_init(struct erofs_buffer_head *bh);
  int z_erofs_compress_exit(void);
  -const char *z_erofs_list_available_compressors(unsigned int i);
+void erofs_print_available_compressors(FILE *f);
+void erofs_print_supported_compressors(FILE *f, unsigned int mask);
    static inline bool erofs_is_packed_inode(struct erofs_inode *inode)
  {
diff --git a/lib/compressor.c b/lib/compressor.c
index 88a2fb0..da8d1b9 100644
--- a/lib/compressor.c
+++ b/lib/compressor.c
@@ -10,18 +10,6 @@
    #define EROFS_CONFIG_COMPR_DEF_BOUNDARY        (128)
  -static const struct erofs_compressor *compressors[] = {
-#if LZ4_ENABLED
-#if LZ4HC_ENABLED
-        &erofs_compressor_lz4hc,
-#endif
-        &erofs_compressor_lz4,
-#endif
-#if HAVE_LIBLZMA
-        &erofs_compressor_lzma,
-#endif
-};
-
  /* for compressors type configuration */
  static struct erofs_supported_algothrim {
      int algtype;
@@ -119,9 +107,38 @@ int erofs_compress_destsize(const struct erofs_compress *c,
      return ret;
  }
  -const char *z_erofs_list_available_compressors(unsigned int i)
+void erofs_print_supported_compressors(FILE *f, unsigned int mask)
  {
-    return i >= ARRAY_SIZE(compressors) ? NULL : compressors[i]->name;
+    unsigned int i = 0;
+    int comma = false;
+    const char *s;
+
+    while (i < erofs_ccfg.erofs_ccfg_num) {
+        s = erofs_ccfg.compressors[i].name;
+        if (s && (mask & (1 << erofs_ccfg.compressors[i++].algorithmtype))) {
+            if (comma)
+                fputs(", ", f);
+            else
+                comma = true;
+            fputs(s, f);
+        }
+    }
+    fputc('\n', f);
+}
+
+void erofs_print_available_compressors(FILE *f)
+{

Should just erofs_print_supported_compressors(f, ~0) and avoid this helper?

As commit message of this patch explained, available compressors means which algothrims are currentlyavailable to user in binary tools. I mean fsck/mkfs.erofs binary tools may only support lz4 compression.erofs_print_available_compressors should only print lz4; but for dump.erofs , which is not used tomake erofs image, there is a bit difference here. dump.erofs should identify
all supportedalgorithms.
Thanks,
Gao Xiang

--
Best regards
Guo Xuenan

Reply via email to