Initial commit

This commit is contained in:
Ria Bhatia
2017-12-04 13:32:57 -06:00
committed by Erik St. Martin
commit 0075e5b0f3
9056 changed files with 2523100 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
package platform
import (
"os/exec"
)
// runtimeArchitecture get the name of the current architecture (x86, x86_64, …)
func runtimeArchitecture() (string, error) {
cmd := exec.Command("uname", "-m")
machine, err := cmd.Output()
if err != nil {
return "", err
}
return string(machine), nil
}

View File

@@ -0,0 +1,16 @@
// Package platform provides helper function to get the runtime architecture
// for different platforms.
package platform
import (
"syscall"
)
// runtimeArchitecture get the name of the current architecture (x86, x86_64, …)
func runtimeArchitecture() (string, error) {
utsname := &syscall.Utsname{}
if err := syscall.Uname(utsname); err != nil {
return "", err
}
return charsToString(utsname.Machine), nil
}

View File

@@ -0,0 +1,52 @@
package platform
import (
"fmt"
"syscall"
"unsafe"
)
var (
modkernel32 = syscall.NewLazyDLL("kernel32.dll")
procGetSystemInfo = modkernel32.NewProc("GetSystemInfo")
)
// see http://msdn.microsoft.com/en-us/library/windows/desktop/ms724958(v=vs.85).aspx
type systeminfo struct {
wProcessorArchitecture uint16
wReserved uint16
dwPageSize uint32
lpMinimumApplicationAddress uintptr
lpMaximumApplicationAddress uintptr
dwActiveProcessorMask uintptr
dwNumberOfProcessors uint32
dwProcessorType uint32
dwAllocationGranularity uint32
wProcessorLevel uint16
wProcessorRevision uint16
}
// Constants
const (
ProcessorArchitecture64 = 9 // PROCESSOR_ARCHITECTURE_AMD64
ProcessorArchitectureIA64 = 6 // PROCESSOR_ARCHITECTURE_IA64
ProcessorArchitecture32 = 0 // PROCESSOR_ARCHITECTURE_INTEL
ProcessorArchitectureArm = 5 // PROCESSOR_ARCHITECTURE_ARM
)
var sysinfo systeminfo
// runtimeArchitecture get the name of the current architecture (x86, x86_64, …)
func runtimeArchitecture() (string, error) {
syscall.Syscall(procGetSystemInfo.Addr(), 1, uintptr(unsafe.Pointer(&sysinfo)), 0, 0)
switch sysinfo.wProcessorArchitecture {
case ProcessorArchitecture64, ProcessorArchitectureIA64:
return "x86_64", nil
case ProcessorArchitecture32:
return "i686", nil
case ProcessorArchitectureArm:
return "arm", nil
default:
return "", fmt.Errorf("Unknown processor architecture")
}
}

View File

@@ -0,0 +1,23 @@
package platform
import (
"runtime"
"github.com/Sirupsen/logrus"
)
var (
// Architecture holds the runtime architecture of the process.
Architecture string
// OSType holds the runtime operating system type (Linux, …) of the process.
OSType string
)
func init() {
var err error
Architecture, err = runtimeArchitecture()
if err != nil {
logrus.Errorf("Could no read system architecture info: %v", err)
}
OSType = runtime.GOOS
}

View File

@@ -0,0 +1,18 @@
// +build linux,386 linux,amd64 linux,arm64
// see golang's sources src/syscall/ztypes_linux_*.go that use int8
package platform
// Convert the OS/ARCH-specific utsname.Machine to string
// given as an array of signed int8
func charsToString(ca [65]int8) string {
s := make([]byte, len(ca))
var lens int
for ; lens < len(ca); lens++ {
if ca[lens] == 0 {
break
}
s[lens] = uint8(ca[lens])
}
return string(s[0:lens])
}

View File

@@ -0,0 +1,18 @@
// +build linux,arm linux,ppc64 linux,ppc64le s390x
// see golang's sources src/syscall/ztypes_linux_*.go that use uint8
package platform
// Convert the OS/ARCH-specific utsname.Machine to string
// given as an array of unsigned uint8
func charsToString(ca [65]uint8) string {
s := make([]byte, len(ca))
var lens int
for ; lens < len(ca); lens++ {
if ca[lens] == 0 {
break
}
s[lens] = ca[lens]
}
return string(s[0:lens])
}