use cmSystemTools::MoveFileIfDifferent()

This is better than doing CopyFileIfDifferent() followed by RemoveFile() in
two ways:

 - it is more efficient, as it avoids disk I/O for the data, even if the
   files here are usually small
 - it is atomic, so an abort during the copy will not leave a destination file
   with partial data behind
This commit is contained in:
Rolf Eike Beer
2019-09-09 10:34:08 +02:00
parent 5eaf1e1be2
commit 5b96fd5b81
3 changed files with 4 additions and 8 deletions

View File

@@ -3417,8 +3417,7 @@ std::string cmGeneratorTarget::GetPchHeader(const std::string& config,
file << pchEpilogue << "\n";
}
}
cmSystemTools::CopyFileIfDifferent(filename_tmp, filename);
cmSystemTools::RemoveFile(filename_tmp);
cmSystemTools::MoveFileIfDifferent(filename_tmp, filename);
}
return inserted.first->second;
}
@@ -3451,8 +3450,7 @@ std::string cmGeneratorTarget::GetPchSource(const std::string& config,
cmGeneratedFileStream file(filename_tmp);
file << "/* generated by CMake */\n";
}
cmSystemTools::CopyFileIfDifferent(filename_tmp, filename);
cmSystemTools::RemoveFile(filename_tmp);
cmSystemTools::MoveFileIfDifferent(filename_tmp, filename);
}
return inserted.first->second;
}

View File

@@ -2275,8 +2275,7 @@ void cmLocalGenerator::AddUnityBuild(cmGeneratorTarget* target,
}
}
}
cmSystemTools::CopyFileIfDifferent(filename_tmp, filename);
cmSystemTools::RemoveFile(filename_tmp);
cmSystemTools::MoveFileIfDifferent(filename_tmp, filename);
target->AddSource(filename, true);

View File

@@ -98,7 +98,6 @@ void CopyAndFullPathMesaHeader(const std::string& source,
// close the files before attempting to copy
fin.close();
fout.close();
cmSystemTools::CopyFileIfDifferent(tempOutputFile, outFile);
cmSystemTools::RemoveFile(tempOutputFile);
cmSystemTools::MoveFileIfDifferent(tempOutputFile, outFile);
}
}