diff options
Diffstat (limited to 'src/internal/syscall/unix/at_libc.go')
| -rw-r--r-- | src/internal/syscall/unix/at_libc.go | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/internal/syscall/unix/at_libc.go b/src/internal/syscall/unix/at_libc.go index d47f69db6f..36a9f22b2a 100644 --- a/src/internal/syscall/unix/at_libc.go +++ b/src/internal/syscall/unix/at_libc.go @@ -18,6 +18,7 @@ import ( //go:linkname procMkdirat libc_mkdirat //go:linkname procFchmodat libc_fchmodat //go:linkname procFchownat libc_fchownat +//go:linkname procRenameat libc_renameat var ( procFstatat, @@ -26,7 +27,8 @@ var ( procReadlinkat, procMkdirat, procFchmodat, - procFchownat uintptr + procFchownat, + procRenameat uintptr ) func Unlinkat(dirfd int, path string, flags int) error { @@ -160,3 +162,25 @@ func Fchownat(dirfd int, path string, uid, gid int, flags int) error { } return nil } + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) error { + oldp, err := syscall.BytePtrFromString(oldpath) + if err != nil { + return err + } + newp, err := syscall.BytePtrFromString(newpath) + if err != nil { + return err + } + _, _, errno := syscall6(uintptr(unsafe.Pointer(&procRenameat)), 4, + uintptr(olddirfd), + uintptr(unsafe.Pointer(oldp)), + uintptr(newdirfd), + uintptr(unsafe.Pointer(newp)), + 0, + 0) + if errno != 0 { + return errno + } + return nil +} |
