From patchwork Thu Jul 9 17:51:48 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joao Marcos Costa X-Patchwork-Id: 241147 List-Id: U-Boot discussion From: joaomarcos.costa at bootlin.com (Joao Marcos Costa) Date: Thu, 9 Jul 2020 19:51:48 +0200 Subject: [PATCH 4/4] fs/squashfs: add support for zlib decompression In-Reply-To: <20200709175148.17193-1-joaomarcos.costa@bootlin.com> References: <20200709175148.17193-1-joaomarcos.costa@bootlin.com> Message-ID: <20200709175148.17193-5-joaomarcos.costa@bootlin.com> Add call to zlib's 'uncompress' function. Add function to display the right error message depending on the decompression's return value. Signed-off-by: Joao Marcos Costa --- fs/squashfs/sqfs_decompressor.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) -- 2.17.1 diff --git a/fs/squashfs/sqfs_decompressor.c b/fs/squashfs/sqfs_decompressor.c index a899a5704b..a8c37f73b7 100644 --- a/fs/squashfs/sqfs_decompressor.c +++ b/fs/squashfs/sqfs_decompressor.c @@ -9,17 +9,41 @@ #include #include #include +#include #include "sqfs_decompressor.h" #include "sqfs_filesystem.h" #include "sqfs_utils.h" +static void zlib_decompression_status(int ret) +{ + switch (ret) { + case Z_BUF_ERROR: + printf("Error: 'dest' buffer is not large enough.\n"); + break; + case Z_DATA_ERROR: + printf("Error: corrupted compressed data.\n"); + break; + case Z_MEM_ERROR: + printf("Error: insufficient memory.\n"); + break; + } +} + int sqfs_decompress(u16 comp_type, void *dest, unsigned long *dest_len, void *source, u32 lenp) { int ret = 0; switch (comp_type) { + case SQFS_COMP_ZLIB: + ret = uncompress(dest, dest_len, source, lenp); + if (ret) { + zlib_decompression_status(ret); + return -EINVAL; + } + + break; default: printf("Error: unknown compression type.\n"); return -EINVAL;