[coreboot-gerrit] Patch set updated for coreboot: cbfstool: add decompression wrappers

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Mon Aug 31 22:18:45 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/11362

-gerrit

commit 24d810208857f3cc27a69c9986b5bd9f9775f328
Author: Patrick Georgi <patrick at georgi-clan.de>
Date:   Wed Aug 26 12:53:41 2015 +0200

    cbfstool: add decompression wrappers
    
    ... and document the interface.
    
    Change-Id: I86a071a61fd6c1ef842f8ffe51f12f0cefdaf2fe
    Signed-off-by: Patrick Georgi <patrick at georgi-clan.de>
---
 util/cbfstool/common.h   | 16 +++++++++++++++-
 util/cbfstool/compress.c | 27 +++++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 1 deletion(-)

diff --git a/util/cbfstool/common.h b/util/cbfstool/common.h
index 5fb1906..4a97fed 100644
--- a/util/cbfstool/common.h
+++ b/util/cbfstool/common.h
@@ -146,10 +146,24 @@ void buffer_delete(struct buffer *buffer);
 const char *arch_to_string(uint32_t a);
 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 };
 
 comp_func_ptr compression_function(enum comp_algo algo);
+decomp_func_ptr decompression_function(enum comp_algo algo);
 
 uint64_t intfiletype(const char *name);
 
diff --git a/util/cbfstool/compress.c b/util/cbfstool/compress.c
index ab94b35..2bde7df 100644
--- a/util/cbfstool/compress.c
+++ b/util/cbfstool/compress.c
@@ -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);
 }
 
+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)
 {
 	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;
 }
 
+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 compress;
@@ -54,3 +64,20 @@ comp_func_ptr compression_function(enum comp_algo algo)
 	}
 	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;
+}



More information about the coreboot-gerrit mailing list