From 1f65c6bf4c9dcfc513eeb9da34a7cac60c6bc4ff Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Sun, 21 Apr 2013 19:19:38 -0600 Subject: [PATCH] Update utils.go to not enforce extra constraints on the kernel "flavor" (such as being integral or even comparable one to another) This is especially to fix the current docker on kernels such as gentoo-sources, where the "flavor" is the string "gentoo", and that obviously fails to be converted to an integer. --- utils.go | 28 ++++++++++------------------ utils_test.go | 26 +++++++++++++------------- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/utils.go b/utils.go index bb891b18a..c6a8c9465 100644 --- a/utils.go +++ b/utils.go @@ -399,10 +399,10 @@ func CopyEscapable(dst io.Writer, src io.ReadCloser) (written int64, err error) } type KernelVersionInfo struct { - Kernel int - Major int - Minor int - Specific int + Kernel int + Major int + Minor int + Flavor string } // FIXME: this doens't build on Darwin @@ -445,21 +445,18 @@ func GetKernelVersion() (*KernelVersionInfo, error) { return nil, err } - specific, err := strconv.Atoi(strings.Split(tmp[1], "-")[0]) - if err != nil { - return nil, err - } + flavor := tmp[1] return &KernelVersionInfo{ - Kernel: kernel, - Major: major, - Minor: minor, - Specific: specific, + Kernel: kernel, + Major: major, + Minor: minor, + Flavor: flavor, }, nil } func (k *KernelVersionInfo) String() string { - return fmt.Sprintf("%d.%d.%d-%d", k.Kernel, k.Major, k.Minor, k.Specific) + return fmt.Sprintf("%d.%d.%d-%s", k.Kernel, k.Major, k.Minor, k.Flavor) } // Compare two KernelVersionInfo struct. @@ -483,11 +480,6 @@ func CompareKernelVersion(a, b *KernelVersionInfo) int { return 1 } - if a.Specific < b.Specific { - return -1 - } else if a.Specific > b.Specific { - return 1 - } return 0 } diff --git a/utils_test.go b/utils_test.go index 1ee223ee3..aa2a1b968 100644 --- a/utils_test.go +++ b/utils_test.go @@ -237,27 +237,27 @@ func assertKernelVersion(t *testing.T, a, b *KernelVersionInfo, result int) { func TestCompareKernelVersion(t *testing.T) { assertKernelVersion(t, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0}, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0}, + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0) assertKernelVersion(t, - &KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0, Specific: 0}, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0}, + &KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0}, + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, -1) assertKernelVersion(t, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0}, - &KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0, Specific: 0}, + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, + &KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0}, 1) assertKernelVersion(t, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0}, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 16}, - -1) + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "0"}, + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "16"}, + 0) assertKernelVersion(t, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 5, Specific: 0}, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0}, + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 5}, + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 1) assertKernelVersion(t, - &KernelVersionInfo{Kernel: 3, Major: 0, Minor: 20, Specific: 25}, - &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0}, + &KernelVersionInfo{Kernel: 3, Major: 0, Minor: 20, Flavor: "25"}, + &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "0"}, -1) }