| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| //go:build !windows | |
| // +build !windows | |
| package replacefile | |
| import ( | |
| "os" | |
| ) | |
| // AtomicRename renames from the source path to the destination path, | |
| // atomically replacing any file that might already exist at the destination. | |
| // | |
| // Typically this operation can succeed only if the source and destination | |
| // are within the same physical filesystem, so this function is best reserved | |
| // for cases where the source and destination exist in the same directory and | |
| // only the local filename differs between them. | |
| // | |
| // The Unix implementation of AtomicRename relies on the atomicity of renaming | |
| // that is required by the ISO C standard, which in turn assumes that Go's | |
| // implementation of rename is calling into a system call that preserves that | |
| // guarantee. | |
| func AtomicRename(source, destination string) error { | |
| // On Unix systems, a rename is sufficiently atomic. | |
| return os.Rename(source, destination) | |
| } |