func getxattr(path string, attr string, dest []byte, pos int, options int) (sz int, err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } var _p1 *byte _p1, err = syscall.BytePtrFromString(attr) if err != nil { return } var _p2 unsafe.Pointer if len(dest) > 0 { _p2 = unsafe.Pointer(&dest[0]) } else { _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := syscall.Syscall6(syscall.SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), uintptr(pos), uintptr(options)) use(unsafe.Pointer(_p0)) use(unsafe.Pointer(_p1)) sz = int(r0) if e1 != 0 { err = errnoErr(e1) } return }
func setxattr(path string, attr string, data []byte, flags int) (err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } var _p1 *byte _p1, err = syscall.BytePtrFromString(attr) if err != nil { return } var _p2 unsafe.Pointer if len(data) > 0 { _p2 = unsafe.Pointer(&data[0]) } else { _p2 = unsafe.Pointer(&_zero) } _, _, e1 := syscall.Syscall6(syscall.SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) use(unsafe.Pointer(_p0)) use(unsafe.Pointer(_p1)) if e1 != 0 { err = errnoErr(e1) } return }
func (this Lua) LoadBufferX(title string, chank []byte, mode string) error { if this == 0 { return errors.New("lua.LoadBufferX: this is null.") } title_ptr, title_err := syscall.BytePtrFromString(title) if title_err != nil { return title_err } mode_ptr, mode_err := syscall.BytePtrFromString(mode) if mode_err != nil { return mode_err } rc, _, _ := luaL_loadbufferx.Call( this.State(), uintptr(unsafe.Pointer(&chank[0])), uintptr(len(chank)), uintptr(unsafe.Pointer(title_ptr)), uintptr(unsafe.Pointer(mode_ptr))) if rc == 0 { return nil } else { return fmt.Errorf("LUA_ERROR(%d)", rc) } }
func add_key(keyType, keyDesc string, payload []byte, id int32) (int32, error) { var ( err error errno syscall.Errno b1, b2 *byte r1 uintptr pptr unsafe.Pointer ) if b1, err = syscall.BytePtrFromString(keyType); err != nil { return 0, err } if b2, err = syscall.BytePtrFromString(keyDesc); err != nil { return 0, err } if len(payload) > 0 { pptr = unsafe.Pointer(&payload[0]) } r1, _, errno = syscall.Syscall6(syscall_add_key, uintptr(unsafe.Pointer(b1)), uintptr(unsafe.Pointer(b2)), uintptr(pptr), uintptr(len(payload)), uintptr(id), 0) if errno != 0 { err = errno return 0, err } return int32(r1), nil }
// Darwin doesn't have support for syscall.Getxattr() so we pull it into its own file and implement it by hand on Darwin. func Getxattr(path string, attr string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } var _p1 *byte _p1, err = syscall.BytePtrFromString(attr) if err != nil { return } var _p2 unsafe.Pointer if len(dest) > 0 { _p2 = unsafe.Pointer(&dest[0]) } else { var _zero uintptr _p2 = unsafe.Pointer(&_zero) } r0, _, e1 := syscall.Syscall6(syscall.SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) sz = int(r0) if e1 != 0 { err = e1 } return }
// Lgetxattr retrieves the value of the extended attribute identified by attr // and associated with the given path in the file system. // It will returns a nil slice and nil error if the xattr is not set. func Lgetxattr(path string, attr string) ([]byte, error) { pathBytes, err := syscall.BytePtrFromString(path) if err != nil { return nil, err } attrBytes, err := syscall.BytePtrFromString(attr) if err != nil { return nil, err } dest := make([]byte, 128) destBytes := unsafe.Pointer(&dest[0]) sz, _, errno := syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(destBytes), uintptr(len(dest)), 0, 0) if errno == syscall.ENODATA { return nil, nil } if errno == syscall.ERANGE { dest = make([]byte, sz) destBytes := unsafe.Pointer(&dest[0]) sz, _, errno = syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(destBytes), uintptr(len(dest)), 0, 0) } if errno != 0 { return nil, errno } return dest[:sz], nil }
func getVfsCap(path string, dest *vfscapData) (err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } r0, _, e1 := syscall.Syscall6(syscall.SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_vfsXattrName)), uintptr(unsafe.Pointer(dest)), vfscapDataSizeV2, 0, 0) if e1 != 0 { err = e1 } switch dest.magic & vfsCapVerMask { case vfsCapVer1: dest.version = 1 if r0 != vfscapDataSizeV1 { return syscall.EINVAL } dest.data[1].permitted = 0 dest.data[1].inheritable = 0 case vfsCapVer2: dest.version = 2 if r0 != vfscapDataSizeV2 { return syscall.EINVAL } default: return syscall.EINVAL } if dest.magic&vfsCapFlageffective != 0 { dest.effective[0] = dest.data[0].permitted | dest.data[0].inheritable dest.effective[1] = dest.data[1].permitted | dest.data[1].inheritable } else { dest.effective[0] = 0 dest.effective[1] = 0 } return }
func (this Lua) GetGlobal(str string) { cstr, err := syscall.BytePtrFromString(str) if err != nil { panic(err.Error()) } lua_getglobal.Call(this.State(), uintptr(unsafe.Pointer(cstr))) }
func (this Lua) GetField(index int, str string) { cstr, err := syscall.BytePtrFromString(str) if err != nil { panic(err.Error()) } lua_getfield.Call(this.State(), uintptr(index), uintptr(unsafe.Pointer(cstr))) }
func callPPBGetInterface(g ppbGetInterface, name string) unsafe.Pointer { p0, err := syscall.BytePtrFromString(name) if err != nil { panic(err) } return _callPPBGetInterface(g, p0) }
func setVfsCap(path string, data *vfscapData) (err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } var size uintptr if data.version == 1 { data.magic = vfsCapVer1 size = vfscapDataSizeV1 } else if data.version == 2 { data.magic = vfsCapVer2 if data.effective[0] != 0 || data.effective[1] != 0 { data.magic |= vfsCapFlageffective } size = vfscapDataSizeV2 } else { return syscall.EINVAL } _, _, e1 := syscall.Syscall6(syscall.SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_vfsXattrName)), uintptr(unsafe.Pointer(data)), size, 0, 0) if e1 != 0 { err = e1 } return }
func (this Lua) PushString(str string) { cstr, err := syscall.BytePtrFromString(str) if err != nil { panic(err.Error()) } lua_pushstring.Call(this.State(), uintptr(unsafe.Pointer(cstr))) }
func searchKeyring(id keyId, name, keyType string) (keyId, error) { var ( r1 int32 b1, b2 *byte err error ) if b1, err = syscall.BytePtrFromString(keyType); err != nil { return 0, err } if b2, err = syscall.BytePtrFromString(name); err != nil { return 0, err } r1, _, err = keyctl(keyctlSearch, uintptr(id), uintptr(unsafe.Pointer(b1)), uintptr(unsafe.Pointer(b2))) return keyId(r1), err }
func removexattr(path string, attr string, options int) (err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } var _p1 *byte _p1, err = syscall.BytePtrFromString(attr) if err != nil { return } _, _, e1 := syscall.Syscall(syscall.SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) if e1 != 0 { err = e1 } return }
func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } var _p1 *byte _p1, err = syscall.BytePtrFromString(attr) if err != nil { return } r0, _, e1 := syscall.Syscall6(syscall.SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) sz = int(r0) if e1 != 0 { err = e1 } return }
func lremovexattr(path string, attr string) (err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } var _p1 *byte _p1, err = syscall.BytePtrFromString(attr) if err != nil { return } _, _, e1 := syscall.Syscall(syscall.SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) use(unsafe.Pointer(_p0)) use(unsafe.Pointer(_p1)) if e1 != 0 { err = errnoErr(e1) } return }
// Returns a []byte slice if the xattr is set and nil otherwise // Requires path and its attribute as arguments func Lgetxattr(path string, attr string) ([]byte, error) { var sz int pathBytes, err := syscall.BytePtrFromString(path) if err != nil { return nil, err } attrBytes, err := syscall.BytePtrFromString(attr) if err != nil { return nil, err } // Start with a 128 length byte array sz = 128 dest := make([]byte, sz) destBytes := unsafe.Pointer(&dest[0]) _sz, _, errno := syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(destBytes), uintptr(len(dest)), 0, 0) switch { case errno == syscall.ENODATA: return nil, errno case errno == syscall.ENOTSUP: return nil, errno case errno == syscall.ERANGE: // 128 byte array might just not be good enough, // A dummy buffer is used ``uintptr(0)`` to get real size // of the xattrs on disk _sz, _, errno = syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(unsafe.Pointer(nil)), uintptr(0), 0, 0) sz = int(_sz) if sz < 0 { return nil, errno } dest = make([]byte, sz) destBytes := unsafe.Pointer(&dest[0]) _sz, _, errno = syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(destBytes), uintptr(len(dest)), 0, 0) if errno != 0 { return nil, errno } case errno != 0: return nil, errno } sz = int(_sz) return dest[:sz], nil }
func BenchmarkSyscallBaseline(b *testing.B) { initAdds() var r uintptr for i := 0; i < b.N; i++ { t, _ := syscall.BytePtrFromString("LoadLibraryA") r, _, _ = a.Call(h, (uintptr)(unsafe.Pointer(t))) } if r != control { b.Fail() } }
func TestCDecl(t *testing.T) { var buf [50]byte fmtp, _ := syscall.BytePtrFromString("%d %d %d") a, _, _ := GetDLL(t, "user32.dll").Proc("wsprintfA").Call( uintptr(unsafe.Pointer(&buf[0])), uintptr(unsafe.Pointer(fmtp)), 1000, 2000, 3000) if string(buf[:a]) != "1000 2000 3000" { t.Error("cdecl USER32.wsprintfA returns", a, "buf=", buf[:a]) } }
func Set(name string, value string) error { var ( bptrname *byte bptrvalue *byte err error ) if bptrname, err = syscall.BytePtrFromString(name); err != nil { return err } if bptrvalue, err = syscall.BytePtrFromString(value); err != nil { return err } if _, err = kenv_sys(SET, unsafe.Pointer(bptrname), unsafe.Pointer(bptrvalue), len(value)+1); err != nil { return err } return nil }
// Lsetxattr sets the value of the extended attribute identified by attr // and associated with the given path in the file system. func Lsetxattr(path string, attr string, data []byte, flags int) error { pathBytes, err := syscall.BytePtrFromString(path) if err != nil { return err } attrBytes, err := syscall.BytePtrFromString(attr) if err != nil { return err } var dataBytes unsafe.Pointer if len(data) > 0 { dataBytes = unsafe.Pointer(&data[0]) } else { dataBytes = unsafe.Pointer(&_zero) } _, _, errno := syscall.Syscall6(syscall.SYS_LSETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(dataBytes), uintptr(len(data)), uintptr(flags), 0) if errno != 0 { return errno } return nil }
func (libcConn) writeString(p Priority, hostname, tag, msg, nl string) error { timestamp := time.Now().Format(time.RFC3339) log := fmt.Sprintf("%s %s %s[%d]: %s%s", timestamp, hostname, tag, os.Getpid(), msg, nl) buf, err := syscall.BytePtrFromString(log) if err != nil { return err } syscall.Entersyscall() syslog_c(int(p), buf) syscall.Exitsyscall() return nil }
func utimensat(dirfd int, path string, times *[2]syscall.Timespec, flags int) (err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } _, _, e1 := syscall.Syscall6(syscall.SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) if e1 != 0 { err = e1 } return }
func Unlink(regionName string) error { name, err := syscall.BytePtrFromString(regionName) if err != nil { return err } if _, _, errno := syscall.Syscall(syscall.SYS_SHM_UNLINK, uintptr(unsafe.Pointer(name)), 0, 0, ); errno != 0 { return errno } return nil }
func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = syscall.BytePtrFromString(path) if err != nil { return } _, _, e1 := syscall.Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) use(unsafe.Pointer(_p0)) if e1 != 0 { err = errnoErr(e1) } return }
// LUtimesNano is used to change access and modification time of the specified path. // It's used for symbol link file because syscall.UtimesNano doesn't support a NOFOLLOW flag atm. func LUtimesNano(path string, ts []syscall.Timespec) error { var _path *byte _path, err := syscall.BytePtrFromString(path) if err != nil { return err } if _, _, err := syscall.Syscall(syscall.SYS_LUTIMES, uintptr(unsafe.Pointer(_path)), uintptr(unsafe.Pointer(&ts[0])), 0); err != 0 && err != syscall.ENOSYS { return err } return nil }
func Open(regionName string, flags int, perm os.FileMode) (*os.File, error) { name, err := syscall.BytePtrFromString(regionName) if err != nil { return nil, err } fd, _, errno := syscall.Syscall(syscall.SYS_SHM_OPEN, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(perm), ) if errno != 0 { return nil, errno } return os.NewFile(fd, regionName), nil }
func (L Lua) LoadFile(path string, mode string) (int, error) { fd, err := os.OpenFile(path, os.O_RDONLY, 0666) if err != nil { return 0, err } defer fd.Close() path_ptr, path_err := syscall.BytePtrFromString(path) if path_err != nil { return 0, err } mode_ptr, mode_err := syscall.BytePtrFromString(mode) if mode_err != nil { return 0, err } callback := syscall.NewCallbackCDecl(callback_reader) load_buffer_mutex.Lock() defer load_buffer_mutex.Unlock() rc, _, _ := lua_load.Call( L.State(), callback, uintptr(unsafe.Pointer(fd)), uintptr(unsafe.Pointer(path_ptr)), uintptr(unsafe.Pointer(mode_ptr))) if rc == LUA_OK { return 0, nil } else if rc == LUA_ERRSYNTAX { return LUA_ERRSYNTAX, errors.New("lua_load: LUA_ERRSYNTAX") } else if rc == LUA_ERRMEM { return LUA_ERRMEM, errors.New("lua_load: LUA_ERRMEM") } else if rc == LUA_ERRGCMM { return LUA_ERRGCMM, errors.New("lua_load: LUA_ERRGCMM") } else { return int(rc), fmt.Errorf("lua_load: returns %d", rc) } }
func getVfsStats(path string) (total uint64, free uint64, err error) { _p0, err := syscall.BytePtrFromString(path) if err != nil { return 0, 0, err } res, err := C.getBytesFree((*C.char)(unsafe.Pointer(_p0)), (*_Ctype_ulonglong)(unsafe.Pointer(&free))) if res != 0 { return 0, 0, err } res, err = C.getBytesTotal((*C.char)(unsafe.Pointer(_p0)), (*_Ctype_ulonglong)(unsafe.Pointer(&total))) if res != 0 { return 0, 0, err } return total, free, nil }
// Delete the actual bridge device. func DeleteBridge(name string) error { s, err := getIfSocket() if err != nil { return err } defer syscall.Close(s) nameBytePtr, err := syscall.BytePtrFromString(name) if err != nil { return err } var ifr ifreqFlags copy(ifr.IfrnName[:len(ifr.IfrnName)-1], []byte(name)) if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(s), syscall.SIOCSIFFLAGS, uintptr(unsafe.Pointer(&ifr))); err != 0 { return err } if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(s), SIOC_BRDELBR, uintptr(unsafe.Pointer(nameBytePtr))); err != 0 { return err } return nil }