cbfstool: add decompression wrappers
... and document the interface. Change-Id: I86a071a61fd6c1ef842f8ffe51f12f0cefdaf2fe Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/11362 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins)
This commit is contained in:
parent
a71c83fa5c
commit
61c822900e
|
@ -146,10 +146,24 @@ void buffer_delete(struct buffer *buffer);
|
||||||
const char *arch_to_string(uint32_t a);
|
const char *arch_to_string(uint32_t a);
|
||||||
uint32_t string_to_arch(const char *arch_string);
|
uint32_t string_to_arch(const char *arch_string);
|
||||||
|
|
||||||
typedef int (*comp_func_ptr) (char *, int, char *, int *);
|
/* Compress in_len bytes from in, storing the result at out, returning the
|
||||||
|
* resulting length in out_len.
|
||||||
|
* Returns 0 on error,
|
||||||
|
* != 0 otherwise, depending on the compressing function.
|
||||||
|
*/
|
||||||
|
typedef int (*comp_func_ptr) (char *in, int in_len, char *out, int *out_len);
|
||||||
|
|
||||||
|
/* Decompress in_len bytes from in, storing the result at out, up to out_len
|
||||||
|
* bytes.
|
||||||
|
* Returns 0 on error,
|
||||||
|
* != 0 otherwise, depending on the decompressing function.
|
||||||
|
*/
|
||||||
|
typedef int (*decomp_func_ptr) (char *in, int in_len, char *out, int out_len);
|
||||||
|
|
||||||
enum comp_algo { CBFS_COMPRESS_NONE = 0, CBFS_COMPRESS_LZMA = 1 };
|
enum comp_algo { CBFS_COMPRESS_NONE = 0, CBFS_COMPRESS_LZMA = 1 };
|
||||||
|
|
||||||
comp_func_ptr compression_function(enum comp_algo algo);
|
comp_func_ptr compression_function(enum comp_algo algo);
|
||||||
|
decomp_func_ptr decompression_function(enum comp_algo algo);
|
||||||
|
|
||||||
uint64_t intfiletype(const char *name);
|
uint64_t intfiletype(const char *name);
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,10 @@ static int lzma_compress(char *in, int in_len, char *out, int *out_len)
|
||||||
return do_lzma_compress(in, in_len, out, out_len);
|
return do_lzma_compress(in, in_len, out, out_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lzma_decompress(char *in, int in_len, char *out, unused int out_len)
|
||||||
|
{
|
||||||
|
return do_lzma_uncompress(out, out_len, in, in_len);
|
||||||
|
}
|
||||||
static int none_compress(char *in, int in_len, char *out, int *out_len)
|
static int none_compress(char *in, int in_len, char *out, int *out_len)
|
||||||
{
|
{
|
||||||
memcpy(out, in, in_len);
|
memcpy(out, in, in_len);
|
||||||
|
@ -38,6 +42,12 @@ static int none_compress(char *in, int in_len, char *out, int *out_len)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int none_decompress(char *in, int in_len, char *out, unused int out_len)
|
||||||
|
{
|
||||||
|
memcpy(out, in, in_len);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
comp_func_ptr compression_function(enum comp_algo algo)
|
comp_func_ptr compression_function(enum comp_algo algo)
|
||||||
{
|
{
|
||||||
comp_func_ptr compress;
|
comp_func_ptr compress;
|
||||||
|
@ -54,3 +64,20 @@ comp_func_ptr compression_function(enum comp_algo algo)
|
||||||
}
|
}
|
||||||
return compress;
|
return compress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
decomp_func_ptr decompression_function(enum comp_algo algo)
|
||||||
|
{
|
||||||
|
decomp_func_ptr decompress;
|
||||||
|
switch (algo) {
|
||||||
|
case CBFS_COMPRESS_NONE:
|
||||||
|
decompress = none_decompress;
|
||||||
|
break;
|
||||||
|
case CBFS_COMPRESS_LZMA:
|
||||||
|
decompress = lzma_decompress;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ERROR("Unknown compression algorithm %d!\n", algo);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return decompress;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue