Index: runtime/bin/dartutils.cc |
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc |
index bde946503f9b00190e6d149e3c59af934ef776d6..ed2f6759465f8b1af04dc210dadeeb9f5662aa00 100644 |
--- a/runtime/bin/dartutils.cc |
+++ b/runtime/bin/dartutils.cc |
@@ -48,14 +48,15 @@ const char* const DartUtils::kHttpScheme = "http:"; |
const char* const DartUtils::kVMServiceLibURL = "dart:vmservice"; |
struct MagicNumberData { |
- static const intptr_t kLength = 4; |
+ static const intptr_t kMaxLength = 4; |
- const uint8_t bytes[kLength]; |
- bool should_skip; |
+ intptr_t length; |
+ const uint8_t bytes[kMaxLength]; |
}; |
-MagicNumberData snapshot_magic_number = {{0xf5, 0xf5, 0xdc, 0xdc}, true}; |
-MagicNumberData kernel_magic_number = {{0x90, 0xab, 0xcd, 0xef}, false}; |
+MagicNumberData snapshot_magic_number = {4, {0xf5, 0xf5, 0xdc, 0xdc}}; |
+MagicNumberData kernel_magic_number = {4, {0x90, 0xab, 0xcd, 0xef}}; |
+MagicNumberData gzip_magic_number = {2, {0x1f, 0x8b, 0, 0}}; |
static bool IsWindowsHost() { |
#if defined(HOST_OS_WINDOWS) |
@@ -339,40 +340,45 @@ Dart_Handle DartUtils::ResolveScript(Dart_Handle url) { |
kNumArgs, dart_args); |
} |
-static bool CheckMagicNumber(const uint8_t** buf, |
- intptr_t* len, |
+static bool CheckMagicNumber(const uint8_t* buffer, |
+ intptr_t buffer_length, |
const MagicNumberData& magic_number) { |
- if ((*len >= MagicNumberData::kLength) && |
- (memcmp(*buf, magic_number.bytes, MagicNumberData::kLength) == 0)) { |
- if (magic_number.should_skip) { |
- *buf += MagicNumberData::kLength; |
- *len -= MagicNumberData::kLength; |
- } |
- return true; |
+ if ((buffer_length >= magic_number.length)) { |
+ return memcmp(buffer, magic_number.bytes, magic_number.length) == 0; |
} |
return false; |
} |
-DartUtils::MagicNumber DartUtils::SniffForMagicNumber(const uint8_t** buf, |
- intptr_t* len) { |
- if (CheckMagicNumber(buf, len, snapshot_magic_number)) { |
+DartUtils::MagicNumber DartUtils::SniffForMagicNumber(const uint8_t* buffer, |
+ intptr_t buffer_length) { |
+ if (CheckMagicNumber(buffer, buffer_length, snapshot_magic_number)) { |
return kSnapshotMagicNumber; |
} |
- if (CheckMagicNumber(buf, len, kernel_magic_number)) { |
+ if (CheckMagicNumber(buffer, buffer_length, kernel_magic_number)) { |
return kKernelMagicNumber; |
} |
+ if (CheckMagicNumber(buffer, buffer_length, gzip_magic_number)) { |
+ return kGzipMagicNumber; |
+ } |
+ |
return kUnknownMagicNumber; |
} |
-void DartUtils::WriteMagicNumber(File* file) { |
+void DartUtils::WriteSnapshotMagicNumber(File* file) { |
// Write a magic number and version information into the snapshot file. |
- bool bytes_written = |
- file->WriteFully(snapshot_magic_number.bytes, MagicNumberData::kLength); |
+ bool bytes_written = file->WriteFully(snapshot_magic_number.bytes, |
+ snapshot_magic_number.length); |
ASSERT(bytes_written); |
} |
+void DartUtils::SkipSnapshotMagicNumber(const uint8_t** buffer, |
+ intptr_t* buffer_length) { |
+ *buffer += snapshot_magic_number.length; |
+ *buffer_length -= snapshot_magic_number.length; |
+} |
+ |
void FUNCTION_NAME(Builtin_GetCurrentDirectory)(Dart_NativeArguments args) { |
const char* current = Directory::Current(); |
if (current != NULL) { |