getKernelVersion_linux.go
16aeb77d
 package docker
 
 import (
c05c91ca
 	"bytes"
16aeb77d
 	"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++
 	}
 
c05c91ca
 	// Remove the \x00 from the release for Atoi to parse correctly
 	release = release[:bytes.IndexByte(release, 0)]
 
16aeb77d
 	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
 }