diff --git a/getKernelVersion_darwin.go b/getKernelVersion_darwin.go new file mode 100644 index 0000000000..36a959b8d6 --- /dev/null +++ b/getKernelVersion_darwin.go @@ -0,0 +1,5 @@ +package docker + +func getKernelVersion() (*KernelVersionInfo, error) { + return nil, fmt.Errorf("Kernel version detection is not available on darwin") +} diff --git a/getKernelVersion_linux.go b/getKernelVersion_linux.go new file mode 100644 index 0000000000..bbf5a4fad1 --- /dev/null +++ b/getKernelVersion_linux.go @@ -0,0 +1,65 @@ +package docker + +import ( + "strconv" + "strings" + "syscall" +) + +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 +} diff --git a/utils.go b/utils.go index 8f9e84f2b8..5974b7df3b 100644 --- a/utils.go +++ b/utils.go @@ -14,10 +14,8 @@ import ( "path/filepath" "regexp" "runtime" - "strconv" "strings" "sync" - "syscall" "time" ) @@ -407,61 +405,7 @@ type KernelVersionInfo struct { // FIXME: this doens't build on Darwin 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 {