From 85e36aab1258d8d9ec7b61ce013f167ef8e03ae0 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Thu, 5 Mar 2020 22:38:15 +0100 Subject: Change the signature of sqfs_compressor_create to return an error code Make sure the function has a way of telling the caller *why* it failed. This way, the function can convey whether it had an internal error, an allocation failure, whether the arguments are totaly nonsensical, or simply that the compressor *or specific configuration* is not supported. Signed-off-by: David Oberhollenzer --- lib/sqfs/comp/zstd.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'lib/sqfs/comp/zstd.c') diff --git a/lib/sqfs/comp/zstd.c b/lib/sqfs/comp/zstd.c index 12ddfdb..986c669 100644 --- a/lib/sqfs/comp/zstd.c +++ b/lib/sqfs/comp/zstd.c @@ -134,29 +134,30 @@ static void zstd_destroy(sqfs_object_t *base) free(zstd); } -sqfs_compressor_t *zstd_compressor_create(const sqfs_compressor_config_t *cfg) +int zstd_compressor_create(const sqfs_compressor_config_t *cfg, + sqfs_compressor_t **out) { zstd_compressor_t *zstd; sqfs_compressor_t *base; if (cfg->flags & ~SQFS_COMP_FLAG_GENERIC_ALL) - return NULL; + return SQFS_ERROR_UNSUPPORTED; if (cfg->opt.zstd.level < 1 || cfg->opt.zstd.level > ZSTD_maxCLevel()) { - return NULL; + return SQFS_ERROR_UNSUPPORTED; } zstd = calloc(1, sizeof(*zstd)); base = (sqfs_compressor_t *)zstd; if (zstd == NULL) - return NULL; + return SQFS_ERROR_ALLOC; zstd->block_size = cfg->block_size; zstd->zctx = ZSTD_createCCtx(); if (zstd->zctx == NULL) { free(zstd); - return NULL; + return SQFS_ERROR_COMPRESSOR; } base->get_configuration = zstd_get_configuration; @@ -166,5 +167,7 @@ sqfs_compressor_t *zstd_compressor_create(const sqfs_compressor_config_t *cfg) base->read_options = zstd_read_options; ((sqfs_object_t *)base)->copy = zstd_create_copy; ((sqfs_object_t *)base)->destroy = zstd_destroy; - return base; + + *out = base; + return 0; } -- cgit v1.2.3