| Index: courgette/courgette_tool.cc
|
| diff --git a/courgette/courgette_tool.cc b/courgette/courgette_tool.cc
|
| index c7e7196f4c111ab373cb8803230c4b72a55d8223..3e856574d6908ce113e83d9ef2d85d3b6792bbfe 100644
|
| --- a/courgette/courgette_tool.cc
|
| +++ b/courgette/courgette_tool.cc
|
| @@ -13,10 +13,14 @@
|
| #include "base/files/file_path.h"
|
| #include "base/files/file_util.h"
|
| #include "base/logging.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "courgette/assembly_program.h"
|
| #include "courgette/courgette.h"
|
| +#include "courgette/encoded_program.h"
|
| +#include "courgette/program_detector.h"
|
| #include "courgette/streams.h"
|
| #include "courgette/third_party/bsdiff.h"
|
|
|
| @@ -76,30 +80,27 @@ void Disassemble(const base::FilePath& input_file,
|
| const base::FilePath& output_file) {
|
| std::string buffer = ReadOrFail(input_file, "input");
|
|
|
| - courgette::AssemblyProgram* program = NULL;
|
| + scoped_ptr<courgette::AssemblyProgram> program;
|
| const courgette::Status parse_status =
|
| courgette::ParseDetectedExecutable(buffer.c_str(), buffer.length(),
|
| &program);
|
| -
|
| if (parse_status != courgette::C_OK)
|
| Problem("Can't parse input (code = %d).", parse_status);
|
|
|
| - courgette::EncodedProgram* encoded = NULL;
|
| - const courgette::Status encode_status = Encode(program, &encoded);
|
| -
|
| - courgette::DeleteAssemblyProgram(program);
|
| -
|
| + scoped_ptr<courgette::EncodedProgram> encoded;
|
| + const courgette::Status encode_status = Encode(*program, &encoded);
|
| if (encode_status != courgette::C_OK)
|
| Problem("Can't encode program.");
|
|
|
| - courgette::SinkStreamSet sinks;
|
| + program.reset();
|
|
|
| + courgette::SinkStreamSet sinks;
|
| const courgette::Status write_status =
|
| - courgette::WriteEncodedProgram(encoded, &sinks);
|
| + courgette::WriteEncodedProgram(encoded.get(), &sinks);
|
| if (write_status != courgette::C_OK)
|
| Problem("Can't serialize encoded program.");
|
|
|
| - courgette::DeleteEncodedProgram(encoded);
|
| + encoded.reset();
|
|
|
| courgette::SinkStream sink;
|
| if (!sinks.CopyTo(&sink))
|
| @@ -159,7 +160,7 @@ void DisassembleAndAdjust(const base::FilePath& program_file,
|
| std::string program_buffer = ReadOrFail(program_file, "program");
|
| std::string model_buffer = ReadOrFail(model_file, "reference");
|
|
|
| - courgette::AssemblyProgram* program = NULL;
|
| + scoped_ptr<courgette::AssemblyProgram> program;
|
| const courgette::Status parse_program_status =
|
| courgette::ParseDetectedExecutable(program_buffer.c_str(),
|
| program_buffer.length(),
|
| @@ -167,7 +168,7 @@ void DisassembleAndAdjust(const base::FilePath& program_file,
|
| if (parse_program_status != courgette::C_OK)
|
| Problem("Can't parse program input (code = %d).", parse_program_status);
|
|
|
| - courgette::AssemblyProgram* model = NULL;
|
| + scoped_ptr<courgette::AssemblyProgram> model;
|
| const courgette::Status parse_model_status =
|
| courgette::ParseDetectedExecutable(model_buffer.c_str(),
|
| model_buffer.length(),
|
| @@ -175,26 +176,26 @@ void DisassembleAndAdjust(const base::FilePath& program_file,
|
| if (parse_model_status != courgette::C_OK)
|
| Problem("Can't parse model input (code = %d).", parse_model_status);
|
|
|
| - const courgette::Status adjust_status = Adjust(*model, program);
|
| + const courgette::Status adjust_status = Adjust(*model, program.get());
|
| if (adjust_status != courgette::C_OK)
|
| Problem("Can't adjust program.");
|
|
|
| - courgette::EncodedProgram* encoded = NULL;
|
| - const courgette::Status encode_status = Encode(program, &encoded);
|
| -
|
| - courgette::DeleteAssemblyProgram(program);
|
| + model.reset();
|
|
|
| + scoped_ptr<courgette::EncodedProgram> encoded;
|
| + const courgette::Status encode_status = Encode(*program, &encoded);
|
| if (encode_status != courgette::C_OK)
|
| Problem("Can't encode program.");
|
|
|
| - courgette::SinkStreamSet sinks;
|
| + program.reset();
|
|
|
| + courgette::SinkStreamSet sinks;
|
| const courgette::Status write_status =
|
| - courgette::WriteEncodedProgram(encoded, &sinks);
|
| + courgette::WriteEncodedProgram(encoded.get(), &sinks);
|
| if (write_status != courgette::C_OK)
|
| Problem("Can't serialize encoded program.");
|
|
|
| - courgette::DeleteEncodedProgram(encoded);
|
| + encoded.reset();
|
|
|
| courgette::SinkStream sink;
|
| if (!sinks.CopyTo(&sink))
|
| @@ -215,7 +216,7 @@ void DisassembleAdjustDiff(const base::FilePath& model_file,
|
| std::string model_buffer = ReadOrFail(model_file, "'old'");
|
| std::string program_buffer = ReadOrFail(program_file, "'new'");
|
|
|
| - courgette::AssemblyProgram* model = NULL;
|
| + scoped_ptr<courgette::AssemblyProgram> model;
|
| const courgette::Status parse_model_status =
|
| courgette::ParseDetectedExecutable(model_buffer.c_str(),
|
| model_buffer.length(),
|
| @@ -223,7 +224,7 @@ void DisassembleAdjustDiff(const base::FilePath& model_file,
|
| if (parse_model_status != courgette::C_OK)
|
| Problem("Can't parse model input (code = %d).", parse_model_status);
|
|
|
| - courgette::AssemblyProgram* program = NULL;
|
| + scoped_ptr<courgette::AssemblyProgram> program;
|
| const courgette::Status parse_program_status =
|
| courgette::ParseDetectedExecutable(program_buffer.c_str(),
|
| program_buffer.length(),
|
| @@ -232,37 +233,41 @@ void DisassembleAdjustDiff(const base::FilePath& model_file,
|
| Problem("Can't parse program input (code = %d).", parse_program_status);
|
|
|
| if (adjust) {
|
| - const courgette::Status adjust_status = Adjust(*model, program);
|
| + const courgette::Status adjust_status = Adjust(*model, program.get());
|
| if (adjust_status != courgette::C_OK)
|
| Problem("Can't adjust program.");
|
| }
|
|
|
| - courgette::EncodedProgram* encoded_program = NULL;
|
| + scoped_ptr<courgette::EncodedProgram> encoded_program;
|
| const courgette::Status encode_program_status =
|
| - Encode(program, &encoded_program);
|
| - courgette::DeleteAssemblyProgram(program);
|
| + Encode(*program, &encoded_program);
|
| if (encode_program_status != courgette::C_OK)
|
| Problem("Can't encode program.");
|
|
|
| - courgette::EncodedProgram* encoded_model = NULL;
|
| - const courgette::Status encode_model_status = Encode(model, &encoded_model);
|
| - courgette::DeleteAssemblyProgram(model);
|
| + program.reset();
|
| +
|
| + scoped_ptr<courgette::EncodedProgram> encoded_model;
|
| + const courgette::Status encode_model_status = Encode(*model, &encoded_model);
|
| if (encode_model_status != courgette::C_OK)
|
| Problem("Can't encode model.");
|
|
|
| + model.reset();
|
| +
|
| courgette::SinkStreamSet program_sinks;
|
| const courgette::Status write_program_status =
|
| - courgette::WriteEncodedProgram(encoded_program, &program_sinks);
|
| + courgette::WriteEncodedProgram(encoded_program.get(), &program_sinks);
|
| if (write_program_status != courgette::C_OK)
|
| Problem("Can't serialize encoded program.");
|
| - courgette::DeleteEncodedProgram(encoded_program);
|
| +
|
| + encoded_program.reset();
|
|
|
| courgette::SinkStreamSet model_sinks;
|
| const courgette::Status write_model_status =
|
| - courgette::WriteEncodedProgram(encoded_model, &model_sinks);
|
| + courgette::WriteEncodedProgram(encoded_model.get(), &model_sinks);
|
| if (write_model_status != courgette::C_OK)
|
| Problem("Can't serialize encoded model.");
|
| - courgette::DeleteEncodedProgram(encoded_model);
|
| +
|
| + encoded_model.reset();
|
|
|
| courgette::SinkStream empty_sink;
|
| for (int i = 0; ; ++i) {
|
| @@ -295,14 +300,16 @@ void Assemble(const base::FilePath& input_file,
|
| if (!sources.Init(buffer.c_str(), buffer.length()))
|
| Problem("Bad input file.");
|
|
|
| - courgette::EncodedProgram* encoded = NULL;
|
| - const courgette::Status read_status = ReadEncodedProgram(&sources, &encoded);
|
| + scoped_ptr<courgette::EncodedProgram> encoded;
|
| + const courgette::Status read_status =
|
| + courgette::ReadEncodedProgram(&sources, &encoded);
|
| if (read_status != courgette::C_OK)
|
| Problem("Bad encoded program.");
|
|
|
| courgette::SinkStream sink;
|
|
|
| - const courgette::Status assemble_status = courgette::Assemble(encoded, &sink);
|
| + const courgette::Status assemble_status =
|
| + courgette::Assemble(encoded.get(), &sink);
|
| if (assemble_status != courgette::C_OK)
|
| Problem("Can't assemble.");
|
|
|
|
|