OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 // Defined when linking against shared lib on Windows. | 6 // Defined when linking against shared lib on Windows. |
7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED) | 7 #if defined(USING_V8_SHARED) && !defined(V8_SHARED) |
8 #define V8_SHARED | 8 #define V8_SHARED |
9 #endif | 9 #endif |
10 | 10 |
(...skipping 1537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1548 #ifdef V8_USE_EXTERNAL_STARTUP_DATA | 1548 #ifdef V8_USE_EXTERNAL_STARTUP_DATA |
1549 class StartupDataHandler { | 1549 class StartupDataHandler { |
1550 public: | 1550 public: |
1551 StartupDataHandler(const char* exec_path, const char* natives_blob, | 1551 StartupDataHandler(const char* exec_path, const char* natives_blob, |
1552 const char* snapshot_blob) { | 1552 const char* snapshot_blob) { |
1553 // If we have (at least one) explicitly given blob, use those. | 1553 // If we have (at least one) explicitly given blob, use those. |
1554 // If not, use the default blob locations next to the d8 binary. | 1554 // If not, use the default blob locations next to the d8 binary. |
1555 if (natives_blob || snapshot_blob) { | 1555 if (natives_blob || snapshot_blob) { |
1556 LoadFromFiles(natives_blob, snapshot_blob); | 1556 LoadFromFiles(natives_blob, snapshot_blob); |
1557 } else { | 1557 } else { |
1558 char natives[100], snapshot[100]; | 1558 char* natives; |
1559 LoadFromFiles( | 1559 char* snapshot; |
1560 RelativePath(natives, exec_path, "natives_blob.bin", sizeof(natives)), | 1560 LoadFromFiles(RelativePath(&natives, exec_path, "natives_blob.bin"), |
1561 RelativePath(snapshot, exec_path, "snapshot_blob.bin", | 1561 RelativePath(&snapshot, exec_path, "snapshot_blob.bin")); |
1562 sizeof(snapshot))); | 1562 |
| 1563 free(natives); |
| 1564 free(snapshot); |
1563 } | 1565 } |
1564 } | 1566 } |
1565 | 1567 |
1566 ~StartupDataHandler() { | 1568 ~StartupDataHandler() { |
1567 delete[] natives_.data; | 1569 delete[] natives_.data; |
1568 delete[] snapshot_.data; | 1570 delete[] snapshot_.data; |
1569 } | 1571 } |
1570 | 1572 |
1571 private: | 1573 private: |
1572 static char* RelativePath(char* buffer, const char* exec_path, | 1574 static char* RelativePath(char** buffer, const char* exec_path, |
1573 const char* name, int buffer_length) { | 1575 const char* name) { |
1574 DCHECK(exec_path); | 1576 DCHECK(exec_path); |
1575 const char* last_slash = strrchr(exec_path, '/'); | 1577 const char* last_slash = strrchr(exec_path, '/'); |
1576 if (last_slash) { | 1578 if (last_slash) { |
1577 int after_slash = last_slash - exec_path + 1; | 1579 int after_slash = last_slash - exec_path + 1; |
1578 DCHECK(buffer_length > after_slash); | 1580 int name_length = strlen(name); |
1579 strncpy(buffer, exec_path, after_slash); | 1581 *buffer = |
1580 buffer[after_slash] = '\0'; | 1582 reinterpret_cast<char*>(calloc(after_slash + name_length + 1, 1)); |
1581 return strncat(buffer, name, buffer_length); | 1583 strncpy(*buffer, exec_path, after_slash); |
| 1584 strncat(*buffer, name, name_length); |
1582 } else { | 1585 } else { |
1583 return strncpy(buffer, name, buffer_length); | 1586 *buffer = strdup(name); |
1584 } | 1587 } |
| 1588 return *buffer; |
1585 } | 1589 } |
1586 | 1590 |
1587 void LoadFromFiles(const char* natives_blob, const char* snapshot_blob) { | 1591 void LoadFromFiles(const char* natives_blob, const char* snapshot_blob) { |
1588 Load(natives_blob, &natives_, v8::V8::SetNativesDataBlob); | 1592 Load(natives_blob, &natives_, v8::V8::SetNativesDataBlob); |
1589 Load(snapshot_blob, &snapshot_, v8::V8::SetSnapshotDataBlob); | 1593 Load(snapshot_blob, &snapshot_, v8::V8::SetSnapshotDataBlob); |
1590 } | 1594 } |
1591 | 1595 |
1592 void Load(const char* blob_file, | 1596 void Load(const char* blob_file, |
1593 v8::StartupData* startup_data, | 1597 v8::StartupData* startup_data, |
1594 void (*setter_fn)(v8::StartupData*)) { | 1598 void (*setter_fn)(v8::StartupData*)) { |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1746 } | 1750 } |
1747 | 1751 |
1748 } // namespace v8 | 1752 } // namespace v8 |
1749 | 1753 |
1750 | 1754 |
1751 #ifndef GOOGLE3 | 1755 #ifndef GOOGLE3 |
1752 int main(int argc, char* argv[]) { | 1756 int main(int argc, char* argv[]) { |
1753 return v8::Shell::Main(argc, argv); | 1757 return v8::Shell::Main(argc, argv); |
1754 } | 1758 } |
1755 #endif | 1759 #endif |
OLD | NEW |