diff options
| author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-03-05 22:38:15 +0100 | 
|---|---|---|
| committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-03-05 22:41:04 +0100 | 
| commit | 85e36aab1258d8d9ec7b61ce013f167ef8e03ae0 (patch) | |
| tree | b1d59cce7894520b53c6b1fa86666d91587aaf82 /lib/sqfs/comp/zstd.c | |
| parent | 5acb22a6a7168f8b961777482f39a125158def50 (diff) | |
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 <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/sqfs/comp/zstd.c')
| -rw-r--r-- | lib/sqfs/comp/zstd.c | 15 | 
1 files changed, 9 insertions, 6 deletions
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;  }  | 
