38 lines
708 B
Go
38 lines
708 B
Go
|
package sysx
|
||
|
|
||
|
import (
|
||
|
"syscall"
|
||
|
"unsafe"
|
||
|
)
|
||
|
|
||
|
var _zero uintptr
|
||
|
|
||
|
// use is a no-op, but the compiler cannot see that it is.
|
||
|
// Calling use(p) ensures that p is kept live until that point.
|
||
|
//go:noescape
|
||
|
func use(p unsafe.Pointer)
|
||
|
|
||
|
// Do the interface allocations only once for common
|
||
|
// Errno values.
|
||
|
var (
|
||
|
errEAGAIN error = syscall.EAGAIN
|
||
|
errEINVAL error = syscall.EINVAL
|
||
|
errENOENT error = syscall.ENOENT
|
||
|
)
|
||
|
|
||
|
// errnoErr returns common boxed Errno values, to prevent
|
||
|
// allocations at runtime.
|
||
|
func errnoErr(e syscall.Errno) error {
|
||
|
switch e {
|
||
|
case 0:
|
||
|
return nil
|
||
|
case syscall.EAGAIN:
|
||
|
return errEAGAIN
|
||
|
case syscall.EINVAL:
|
||
|
return errEINVAL
|
||
|
case syscall.ENOENT:
|
||
|
return errENOENT
|
||
|
}
|
||
|
return e
|
||
|
}
|