Index: runtime/bin/main.cc |
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc |
index 9022af0d7ae16bc4e7dc11594b144129e5b74303..c8be4326adc4477d9e4f030846b5045c0cc7704d 100644 |
--- a/runtime/bin/main.cc |
+++ b/runtime/bin/main.cc |
@@ -32,7 +32,7 @@ |
#include "platform/hashmap.h" |
#include "platform/text_buffer.h" |
#if !defined(DART_PRECOMPILER) |
-#include "zlib/zlib.h" |
+#include "bin/gzip.h" |
#endif |
#include "vm/kernel.h" |
@@ -1658,74 +1658,10 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) { |
extern unsigned int observatory_assets_archive_len; |
extern const uint8_t* observatory_assets_archive; |
-// |input| is assumed to be a gzipped stream. |
-// This function allocates the output buffer in the C heap and the caller |
-// is responsible for freeing it. |
-void Decompress(const uint8_t* input, |
- unsigned int input_len, |
- uint8_t** output, |
- unsigned int* output_length) { |
- ASSERT(input != NULL); |
- ASSERT(input_len > 0); |
- ASSERT(output != NULL); |
- ASSERT(output_length != NULL); |
- |
- // Initialize output. |
- *output = NULL; |
- *output_length = 0; |
- |
- const unsigned int kChunkSize = 256 * 1024; |
- uint8_t chunk_out[kChunkSize]; |
- z_stream strm; |
- strm.zalloc = Z_NULL; |
- strm.zfree = Z_NULL; |
- strm.opaque = Z_NULL; |
- strm.avail_in = 0; |
- strm.next_in = 0; |
- int ret = inflateInit2(&strm, 32 + MAX_WBITS); |
- ASSERT(ret == Z_OK); |
- |
- unsigned int input_cursor = 0; |
- unsigned int output_cursor = 0; |
- do { |
- // Setup input. |
- unsigned int size_in = input_len - input_cursor; |
- if (size_in > kChunkSize) { |
- size_in = kChunkSize; |
- } |
- strm.avail_in = size_in; |
- strm.next_in = const_cast<uint8_t*>(&input[input_cursor]); |
- |
- // Inflate until we've exhausted the current input chunk. |
- do { |
- // Setup output. |
- strm.avail_out = kChunkSize; |
- strm.next_out = &chunk_out[0]; |
- // Inflate. |
- ret = inflate(&strm, Z_SYNC_FLUSH); |
- // We either hit the end of the stream or made forward progress. |
- ASSERT((ret == Z_STREAM_END) || (ret == Z_OK)); |
- // Grow output buffer size. |
- unsigned int size_out = kChunkSize - strm.avail_out; |
- *output_length += size_out; |
- *output = reinterpret_cast<uint8_t*>(realloc(*output, *output_length)); |
- // Copy output. |
- memmove(&((*output)[output_cursor]), &chunk_out[0], size_out); |
- output_cursor += size_out; |
- } while (strm.avail_out == 0); |
- |
- // We've processed size_in bytes. |
- input_cursor += size_in; |
- |
- // We're finished decompressing when zlib tells us. |
- } while (ret != Z_STREAM_END); |
- |
- inflateEnd(&strm); |
-} |
Dart_Handle GetVMServiceAssetsArchiveCallback() { |
uint8_t* decompressed = NULL; |
- unsigned int decompressed_len = 0; |
+ intptr_t decompressed_len = 0; |
Decompress(observatory_assets_archive, observatory_assets_archive_len, |
&decompressed, &decompressed_len); |
Dart_Handle tar_file = |