| Index: src/mksnapshot.cc
|
| diff --git a/src/mksnapshot.cc b/src/mksnapshot.cc
|
| index dd491166bd470b65eee30c8c8d562dffd9f8642f..1ed610341eb2889856369850799f292f10bc82c5 100644
|
| --- a/src/mksnapshot.cc
|
| +++ b/src/mksnapshot.cc
|
| @@ -136,6 +136,7 @@ class PartialSnapshotSink : public i::SnapshotByteSink {
|
| return true;
|
| }
|
| int raw_size() { return raw_size_; }
|
| +
|
| private:
|
| i::List<char> data_;
|
| int raw_size_;
|
| @@ -265,6 +266,32 @@ class BZip2Compressor : public Compressor {
|
| private:
|
| i::ScopedVector<char>* output_;
|
| };
|
| +
|
| +
|
| +class BZip2Decompressor : public StartupDataDecompressor {
|
| + public:
|
| + virtual ~BZip2Decompressor() { }
|
| +
|
| + protected:
|
| + virtual int DecompressData(char* raw_data,
|
| + int* raw_data_size,
|
| + const char* compressed_data,
|
| + int compressed_data_size) {
|
| + ASSERT_EQ(StartupData::kBZip2,
|
| + V8::GetCompressedStartupDataAlgorithm());
|
| + unsigned int decompressed_size = *raw_data_size;
|
| + int result =
|
| + BZ2_bzBuffToBuffDecompress(raw_data,
|
| + &decompressed_size,
|
| + const_cast<char*>(compressed_data),
|
| + compressed_data_size,
|
| + 0, 1);
|
| + if (result == BZ_OK) {
|
| + *raw_data_size = decompressed_size;
|
| + }
|
| + return result;
|
| + }
|
| +};
|
| #endif
|
|
|
|
|
| @@ -281,6 +308,14 @@ int main(int argc, char** argv) {
|
| i::FlagList::PrintHelp();
|
| return !i::FLAG_help;
|
| }
|
| +#ifdef COMPRESS_STARTUP_DATA_BZ2
|
| + BZip2Decompressor natives_decompressor;
|
| + int bz2_result = natives_decompressor.Decompress();
|
| + if (bz2_result != BZ_OK) {
|
| + fprintf(stderr, "bzip error code: %d\n", bz2_result);
|
| + exit(1);
|
| + }
|
| +#endif
|
| i::Serializer::Enable();
|
| Persistent<Context> context = v8::Context::New();
|
| ASSERT(!context.IsEmpty());
|
|
|