mirror of
https://github.com/hanzoai/go-fuse.git
synced 2026-10-30 14:46:18 +00:00
Tested on MacOS 14.2 (macfuse 4.5.0) and Ubuntu 20.04.2 (Linux 5.15.0) Change-Id: I3f4f92c2d2aa3f4fc3696b661fa3cb0e3b43282b
39 lines
679 B
Go
39 lines
679 B
Go
package renameat
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
const (
|
|
SYS_RENAMEATX_NP = 488
|
|
RENAME_SWAP = 0x2
|
|
RENAME_EXCHANGE = RENAME_SWAP
|
|
)
|
|
|
|
func renameat(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) error {
|
|
oldpathCString, err := syscall.BytePtrFromString(oldpath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
newpathCString, err := syscall.BytePtrFromString(newpath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, _, errno := syscall.Syscall6(
|
|
SYS_RENAMEATX_NP,
|
|
uintptr(olddirfd),
|
|
uintptr(unsafe.Pointer(oldpathCString)),
|
|
uintptr(newdirfd),
|
|
uintptr(unsafe.Pointer(newpathCString)),
|
|
uintptr(flags),
|
|
0,
|
|
)
|
|
|
|
if errno != 0 {
|
|
return errno
|
|
}
|
|
return nil
|
|
}
|