#include "util/atomic_write.h"
#include "base/files/file_util.h"
namespace util {
int WriteFileAtomically(const base::FilePath& filename,
const char* data,
int size) {
base::FilePath dir = filename.DirName();
base::FilePath temp_file_path;
{
base::File temp_file =
base::CreateAndOpenTemporaryFileInDir(dir, &temp_file_path);
if (!temp_file.IsValid()) {
return -1;
}
if (temp_file.WriteAtCurrentPos(data, size) != size) {
return -1;
}
}
if (!base::ReplaceFile(temp_file_path, filename, NULL)) {
return -1;
}
return size;
}
}