Chromium Code Reviews| Index: tools/gn/filesystem_utils.cc | 
| diff --git a/tools/gn/filesystem_utils.cc b/tools/gn/filesystem_utils.cc | 
| index 5905cdb9f1ec73749a03e15428d5109542712b22..870438405934402d537746fbeef6ee6c60b59fd6 100644 | 
| --- a/tools/gn/filesystem_utils.cc | 
| +++ b/tools/gn/filesystem_utils.cc | 
| @@ -687,6 +687,33 @@ std::string GetOutputSubdirName(const Label& toolchain_label, bool is_default) { | 
| return toolchain_label.name() + "/"; | 
| } | 
| +bool ContentsEqual(const base::FilePath& file_path, std::stringstream* data) { | 
| 
 
brettw
2016/02/02 20:50:23
I'm thinking it might be better if this took a std
 
Tomasz Moniuszko
2016/02/03 10:20:30
Done.
 
 | 
| + // Compare file and stream sizes first. Quick and will save us some time if | 
| + // they are different sizes. | 
| + int64_t data_size = data->tellp(); | 
| + | 
| + int64_t file_size; | 
| + if (!base::GetFileSize(file_path, &file_size) || file_size != data_size) | 
| + return false; | 
| + | 
| + std::string file_data; | 
| + file_data.resize(file_size); | 
| + if (!base::ReadFileToString(file_path, &file_data)) | 
| + return false; | 
| + | 
| + return file_data == data->str(); | 
| +} | 
| + | 
| +bool WriteFileIfChanged(const base::FilePath& file_path, | 
| + std::stringstream* data) { | 
| + if (ContentsEqual(file_path, data)) | 
| + return true; | 
| + | 
| + std::string data_str = data->str(); | 
| + int size = static_cast<int>(data_str.size()); | 
| + return base::WriteFile(file_path, data_str.c_str(), size) == size; | 
| +} | 
| + | 
| SourceDir GetToolchainOutputDir(const Settings* settings) { | 
| return settings->toolchain_output_subdir().AsSourceDir( | 
| settings->build_settings()); |