Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1246)

Unified Diff: utility/bmpblk_util.c

Issue 6523019: Enable LZMA compression in bmpbklk_utility. (Closed) Base URL: http://git.chromium.org/git/vboot_reference.git@master
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « utility/Makefile ('k') | utility/bmpblk_utility.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utility/bmpblk_util.c
diff --git a/utility/bmpblk_util.c b/utility/bmpblk_util.c
index 214beda4b0040d2b2a1b6b88c283665e3b47c2d4..9da9d6bcdd9f3cea9718aa24a0209a74b357ceb0 100644
--- a/utility/bmpblk_util.c
+++ b/utility/bmpblk_util.c
@@ -5,6 +5,7 @@
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
+#include <lzma.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
@@ -139,6 +140,51 @@ static void *do_efi_decompress(ImageInfo *img) {
}
+
+static void *do_lzma_decompress(ImageInfo *img) {
+ void *ibuf;
+ void *obuf;
+ uint32_t isize;
+ uint32_t osize;
+ lzma_stream stream = LZMA_STREAM_INIT;
+ lzma_ret result;
+
+ ibuf = ((void *)img) + sizeof(ImageInfo);
Hung-Te 2011/02/15 07:55:10 We should not perform arithmetic operation to void
Tom Wai-Hong Tam 2011/02/16 10:58:03 Done.
+ isize = img->compressed_size;
+ osize = img->original_size;
+ obuf = malloc(osize);
Hung-Te 2011/02/15 07:55:10 Why not lzma_stream_buffer_bound?
Tom Wai-Hong Tam 2011/02/16 10:58:03 Since the exact uncompressed size is filled in whe
+ if (!obuf) {
+ fprintf(stderr, "Can't allocate %d bytes: %s\n",
+ osize,
+ strerror(errno));
+ return 0;
+ }
+
+ result = lzma_auto_decoder(&stream, -1, 0);
+ if (result != LZMA_OK) {
+ fprintf(stderr, "Unalbe to initialize auto decoder (error: %d)!\n", result);
Hung-Te 2011/02/15 07:55:10 Unable, typo
Tom Wai-Hong Tam 2011/02/16 10:58:03 Done.
+ free(obuf);
+ return 0;
+ }
+
+ stream.next_in = ibuf;
+ stream.avail_in = isize;
+ do {
+ stream.next_out = obuf;
+ stream.avail_out = osize;
+ result = lzma_code(&stream, LZMA_FINISH);
+ if (result != LZMA_OK && result != LZMA_STREAM_END) {
+ fprintf(stderr, "Unalbe to decode data (error: %d)!\n", result);
+ free(obuf);
+ return 0;
+ }
+ } while (result == LZMA_OK);
+ lzma_end(&stream);
+ return obuf;
+}
+
+
+
// Show what's inside. If todir is NULL, just print. Otherwise unpack.
int dump_bmpblock(const char *infile, int show_as_yaml,
const char *todir, int overwrite) {
@@ -266,6 +312,16 @@ int dump_bmpblock(const char *infile, int show_as_yaml,
}
free_data = 1;
break;
+ case COMPRESS_LZMA:
+ data_ptr = do_lzma_decompress(img);
+ if (!data_ptr) {
+ fclose(bfp);
+ fclose(yfp);
+ discard_file(ptr, length);
+ return 1;
+ }
+ free_data = 1;
+ break;
default:
fprintf(stderr, "Unsupported compression method encountered.\n");
fclose(bfp);
« no previous file with comments | « utility/Makefile ('k') | utility/bmpblk_utility.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698