|
@@ -14,10 +14,8 @@ import (
|
|
"path/filepath"
|
|
"path/filepath"
|
|
"regexp"
|
|
"regexp"
|
|
"runtime"
|
|
"runtime"
|
|
- "strconv"
|
|
|
|
"strings"
|
|
"strings"
|
|
"sync"
|
|
"sync"
|
|
- "syscall"
|
|
|
|
"time"
|
|
"time"
|
|
)
|
|
)
|
|
|
|
|
|
@@ -407,61 +405,7 @@ type KernelVersionInfo struct {
|
|
|
|
|
|
// FIXME: this doens't build on Darwin
|
|
// FIXME: this doens't build on Darwin
|
|
func GetKernelVersion() (*KernelVersionInfo, error) {
|
|
func GetKernelVersion() (*KernelVersionInfo, error) {
|
|
- var (
|
|
|
|
- uts syscall.Utsname
|
|
|
|
- flavor string
|
|
|
|
- kernel, major, minor int
|
|
|
|
- err error
|
|
|
|
- )
|
|
|
|
-
|
|
|
|
- if err := syscall.Uname(&uts); err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- release := make([]byte, len(uts.Release))
|
|
|
|
-
|
|
|
|
- i := 0
|
|
|
|
- for _, c := range uts.Release {
|
|
|
|
- release[i] = byte(c)
|
|
|
|
- i++
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- tmp := strings.SplitN(string(release), "-", 2)
|
|
|
|
- tmp2 := strings.SplitN(tmp[0], ".", 3)
|
|
|
|
-
|
|
|
|
- if len(tmp2) > 0 {
|
|
|
|
- kernel, err = strconv.Atoi(tmp2[0])
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if len(tmp2) > 1 {
|
|
|
|
- major, err = strconv.Atoi(tmp2[1])
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if len(tmp2) > 2 {
|
|
|
|
- minor, err = strconv.Atoi(tmp2[2])
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, err
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if len(tmp) == 2 {
|
|
|
|
- flavor = tmp[1]
|
|
|
|
- } else {
|
|
|
|
- flavor = ""
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return &KernelVersionInfo{
|
|
|
|
- Kernel: kernel,
|
|
|
|
- Major: major,
|
|
|
|
- Minor: minor,
|
|
|
|
- Flavor: flavor,
|
|
|
|
- }, nil
|
|
|
|
|
|
+ return getKernelVersion()
|
|
}
|
|
}
|
|
|
|
|
|
func (k *KernelVersionInfo) String() string {
|
|
func (k *KernelVersionInfo) String() string {
|