| // 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 |