| Index: src/snapshot/mksnapshot.cc
|
| diff --git a/src/snapshot/mksnapshot.cc b/src/snapshot/mksnapshot.cc
|
| index 99d93aade8cc926d56f0529375bbca5528fedb2d..09cbf93e1ef3d0c9cf79a31ec538222b7a64c654 100644
|
| --- a/src/snapshot/mksnapshot.cc
|
| +++ b/src/snapshot/mksnapshot.cc
|
| @@ -21,15 +21,17 @@ using namespace v8;
|
|
|
| class SnapshotWriter {
|
| public:
|
| - explicit SnapshotWriter(const char* snapshot_file)
|
| - : fp_(GetFileDescriptorOrDie(snapshot_file)),
|
| - startup_blob_file_(NULL) {}
|
| + SnapshotWriter() : fp_(NULL), startup_blob_file_(NULL) {}
|
|
|
| ~SnapshotWriter() {
|
| - fclose(fp_);
|
| + if (fp_) fclose(fp_);
|
| if (startup_blob_file_) fclose(startup_blob_file_);
|
| }
|
|
|
| + void SetSnapshotFile(const char* snapshot_file) {
|
| + if (snapshot_file != NULL) fp_ = GetFileDescriptorOrDie(snapshot_file);
|
| + }
|
| +
|
| void SetStartupBlobFile(const char* startup_blob_file) {
|
| if (startup_blob_file != NULL)
|
| startup_blob_file_ = GetFileDescriptorOrDie(startup_blob_file);
|
| @@ -38,7 +40,7 @@ class SnapshotWriter {
|
| void WriteSnapshot(v8::StartupData blob) const {
|
| i::Vector<const i::byte> blob_vector(
|
| reinterpret_cast<const i::byte*>(blob.data), blob.raw_size);
|
| - WriteSnapshotFile(blob_vector);
|
| + MaybeWriteSnapshotFile(blob_vector);
|
| MaybeWriteStartupBlob(blob_vector);
|
| }
|
|
|
| @@ -53,7 +55,9 @@ class SnapshotWriter {
|
| }
|
| }
|
|
|
| - void WriteSnapshotFile(const i::Vector<const i::byte>& blob) const {
|
| + void MaybeWriteSnapshotFile(const i::Vector<const i::byte>& blob) const {
|
| + if (!fp_) return;
|
| +
|
| WriteFilePrefix();
|
| WriteData(blob);
|
| WriteFileSuffix();
|
| @@ -142,8 +146,9 @@ int main(int argc, char** argv) {
|
| // Print the usage if an error occurs when parsing the command line
|
| // flags or if the help flag is set.
|
| int result = i::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
|
| - if (result > 0 || (argc != 2 && argc != 3) || i::FLAG_help) {
|
| - ::printf("Usage: %s [flag] ... outfile\n", argv[0]);
|
| + if (result > 0 || (argc != 1 && argc != 2) || i::FLAG_help) {
|
| + ::printf("Usage: %s --startup_src=... --startup_blob=... [extras]\n",
|
| + argv[0]);
|
| i::FlagList::PrintHelp();
|
| return !i::FLAG_help;
|
| }
|
| @@ -155,9 +160,10 @@ int main(int argc, char** argv) {
|
| v8::V8::Initialize();
|
|
|
| {
|
| - SnapshotWriter writer(argv[1]);
|
| + SnapshotWriter writer;
|
| + if (i::FLAG_startup_src) writer.SetSnapshotFile(i::FLAG_startup_src);
|
| if (i::FLAG_startup_blob) writer.SetStartupBlobFile(i::FLAG_startup_blob);
|
| - char* extra_code = GetExtraCode(argc == 3 ? argv[2] : NULL);
|
| + char* extra_code = GetExtraCode(argc == 2 ? argv[1] : NULL);
|
| StartupData blob = v8::V8::CreateSnapshotDataBlob(extra_code);
|
| CHECK(blob.data);
|
| writer.WriteSnapshot(blob);
|
|
|