1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package docker
- import (
- "bytes"
- "github.com/dotcloud/docker/utils"
- "strconv"
- "strings"
- "syscall"
- )
- // FIXME: Move this to utils package
- func getKernelVersion() (*utils.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++
- }
- // Remove the \x00 from the release for Atoi to parse correctly
- release = release[:bytes.IndexByte(release, 0)]
- 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 &utils.KernelVersionInfo{
- Kernel: kernel,
- Major: major,
- Minor: minor,
- Flavor: flavor,
- }, nil
- }
|