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  }