# HG changeset patch # User Pascal Bellard # Date 1588709644 0 # Node ID 299e2fd264d8260b48d1295a7a39fe1c488467ce # Parent cea6e929d21e881a91ab090cab42cb1d79a509be fusecloop: multicompressor support (again) diff -r cea6e929d21e -r 299e2fd264d8 fusecloop/stuff/fusecloop.u --- a/fusecloop/stuff/fusecloop.u Tue May 05 11:06:44 2020 +0000 +++ b/fusecloop/stuff/fusecloop.u Tue May 05 20:14:04 2020 +0000 @@ -1977,7 +1977,23 @@ return 0; --- create_compressed_fs.c +++ create_compressed_fs.c -@@ -179,7 +179,6 @@ +@@ -78,6 +78,7 @@ + if (lzma_code(&strm, LZMA_FINISH) == LZMA_STREAM_END) { + + *compressed_len -= strm.avail_out; ++ *compressed_len |= (CLOOP_COMPRESSOR_XZ << 28); + res = Z_OK; + } + } +@@ -101,6 +102,7 @@ + (void) level; + if (res <= 0) return Z_ERRNO; + *compressed_len = res; ++ *compressed_len |= (CLOOP_COMPRESSOR_LZ4 << 28); + return Z_OK; + } + +@@ -179,7 +181,6 @@ static unsigned long block_size = 0; static void flush_index(int sig) { @@ -1985,7 +2001,7 @@ struct cloop_tail tail; unsigned long len; int flags = 0; -@@ -187,24 +186,21 @@ +@@ -187,24 +188,21 @@ fprintf(stderr, "Write index for %u blocks\n", n); if (block_size >= 0x1000000) lastlen = 0; if (sig) flags = 0x80; @@ -2015,7 +2031,7 @@ write(STDOUT_FILENO, compressed, len); write(STDOUT_FILENO, &tail, sizeof(tail)); exit(sig != 0); -@@ -242,7 +238,7 @@ +@@ -242,7 +240,7 @@ #endif block_size = atoi(argv[1]); } @@ -2024,7 +2040,7 @@ block_size = DEFAULT_BLOCKSIZE; fprintf(stderr, "Block size is %lu\n", block_size); zlenmax = block_size + block_size/1000 + 12; -@@ -280,7 +276,7 @@ +@@ -280,7 +278,7 @@ quit("Realloc hash"); } hash[n] = md5sum(uncompressed, len); @@ -2033,24 +2049,33 @@ if (n < j) j = n; for (i = 0; i < j; i++) { -@@ -289,7 +285,7 @@ +@@ -289,7 +287,7 @@ break; } if (i != j) { - block_index[n] = ntohl(0x80000000 | i); -+ block_index[n] = ntohl((CLOOP_COMPRESSOR_LINK >> 28) | i); ++ block_index[n] = ntohl((CLOOP_COMPRESSOR_LINK << 28) | i); fprintf(stderr, "Block %u length %lu => duplicate %u\n", n, block_size, i); continue; -@@ -299,7 +295,7 @@ +@@ -297,14 +295,14 @@ + } + len = zlenmax; if (compress3(compressed, &len, uncompressed, lastlen, - Z_BEST_SPEED) != Z_OK || len >= lastlen) { +- Z_BEST_SPEED) != Z_OK || len >= lastlen) { ++ Z_BEST_SPEED) != Z_OK || (len & 0x0FFFFFFF) >= lastlen) { len = lastlen; - block_index[n] = ntohl(0xFFFFFFFF); -+ block_index[n] = ntohl((CLOOP_COMPRESSOR_NONE >> 28) | lastlen); ++ block_index[n] = ntohl((CLOOP_COMPRESSOR_NONE << 28) | lastlen); write(STDOUT_FILENO, uncompressed, len); } else { + block_index[n] = ntohl(len); +- write(STDOUT_FILENO, compressed, len); ++ write(STDOUT_FILENO, compressed, len &= 0x0FFFFFFF); + } + fprintf(stderr, "Block %u length %lu => %lu\n", + n, block_size, len); --- extract_compressed_fs.c +++ extract_compressed_fs.c @@ -69,9 +69,8 @@