| // Copyright (c) 2022 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #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; | |
| } | |
| } // namespace util |