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