gobot.io/x/gobot@v1.16.0/sysfs/syscall.go (about) 1 package sysfs 2 3 import ( 4 "syscall" 5 ) 6 7 // SystemCaller represents a Syscall 8 type SystemCaller interface { 9 Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) 10 } 11 12 // NativeSyscall represents the native Syscall 13 type NativeSyscall struct{} 14 15 // MockSyscall represents the mock Syscall 16 type MockSyscall struct { 17 Impl func(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) 18 } 19 20 var sys SystemCaller = &NativeSyscall{} 21 22 // SetSyscall sets the Syscall implementation 23 func SetSyscall(s SystemCaller) { 24 sys = s 25 } 26 27 // Syscall calls either the NativeSyscall or user defined Syscall 28 func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { 29 return sys.Syscall(trap, a1, a2, a3) 30 } 31 32 // Syscall calls syscall.Syscall 33 func (sys *NativeSyscall) Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { 34 return syscall.Syscall(trap, a1, a2, a3) 35 } 36 37 // Syscall implements the SystemCaller interface 38 func (sys *MockSyscall) Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { 39 if sys.Impl != nil { 40 return sys.Impl(trap, a1, a2, a3) 41 } 42 return 0, 0, 0 43 }