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

Unified Diff: utility/bmpblk_utility.cc

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
« utility/bmpblk_util.c ('K') | « utility/bmpblk_util.c ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utility/bmpblk_utility.cc
diff --git a/utility/bmpblk_utility.cc b/utility/bmpblk_utility.cc
index 9f912d0b0a0b6ae1af239a0e6438013551ddbf77..fd8c8f6899f17ab48723b645748218ac17ea782e 100644
--- a/utility/bmpblk_utility.cc
+++ b/utility/bmpblk_utility.cc
@@ -10,6 +10,7 @@
#include <assert.h>
#include <errno.h>
#include <getopt.h>
+#include <lzma.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -326,6 +327,37 @@ void BmpBlockUtil::load_all_image_files() {
free(tmpbuf);
}
break;
+ case COMPRESS_LZMA:
+ {
+ // Calculate the worst case of buffer size.
+ uint32_t tmpsize = lzma_stream_buffer_bound(content.size());
+ uint8_t *tmpbuf = (uint8_t *)malloc(tmpsize);
+ lzma_stream stream = LZMA_STREAM_INIT;
+ lzma_ret result;
+
+ result = lzma_easy_encoder(&stream, 9, LZMA_CHECK_NONE);
+ if (result != LZMA_OK) {
+ error("Unable to initialize easy encoder (error: %d)!\n", result);
+ }
+
+ stream.next_in = (uint8_t *)content.data();
+ stream.avail_in = content.size();
+ do {
+ stream.next_out = tmpbuf;
+ stream.avail_out = tmpsize;
+ result = lzma_code(&stream, LZMA_FINISH);
+ if (result != LZMA_OK && result != LZMA_STREAM_END) {
+ error("Unable to encode data (error: %d)!\n", result);
+ }
+ } while (result == LZMA_OK);
+ it->second.data.compression = compression_;
+ it->second.compressed_content.assign((const char *)tmpbuf,
+ tmpsize - stream.avail_out);
+ it->second.data.compressed_size = tmpsize - stream.avail_out;
+ lzma_end(&stream);
+ free(tmpbuf);
+ }
+ break;
default:
error("Unsupported compression method attempted.\n");
}
@@ -535,7 +567,7 @@ static void usagehelp_exit(const char *prog_name) {
" -z NUM = compression algorithm to use\n"
" 0 = none\n"
" 1 = EFIv1\n"
- " 2 = TBD\n"
+ " 2 = LZMA\n"
"\n", prog_name);
printf(
"To display the contents of a BMPBLOCK:\n"
« utility/bmpblk_util.c ('K') | « utility/bmpblk_util.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698