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

Side by Side Diff: src/d8.cc

Issue 791713003: Allocate memory for external snapshot paths in d8 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 6 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698