aboutsummaryrefslogtreecommitdiff
path: root/src/internal/syscall/unix/at_libc.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal/syscall/unix/at_libc.go')
-rw-r--r--src/internal/syscall/unix/at_libc.go26
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
+}