Kaynağa Gözat

Make the kernel version detection more generic

Guillaume J. Charmes 12 yıl önce
ebeveyn
işleme
4ac3b803b9
1 değiştirilmiş dosya ile 26 ekleme ve 17 silme
  1. 26 17
      utils.go

+ 26 - 17
utils.go

@@ -407,7 +407,12 @@ type KernelVersionInfo struct {
 
 // FIXME: this doens't build on Darwin
 func GetKernelVersion() (*KernelVersionInfo, error) {
-	var uts syscall.Utsname
+	var (
+		uts                  syscall.Utsname
+		flavor               string
+		kernel, major, minor int
+		err                  error
+	)
 
 	if err := syscall.Uname(&uts); err != nil {
 		return nil, err
@@ -422,30 +427,34 @@ func GetKernelVersion() (*KernelVersionInfo, error) {
 	}
 
 	tmp := strings.SplitN(string(release), "-", 2)
-	if len(tmp) != 2 {
-		return nil, fmt.Errorf("Unrecognized kernel version")
-	}
 	tmp2 := strings.SplitN(tmp[0], ".", 3)
-	if len(tmp2) != 3 {
-		return nil, fmt.Errorf("Unrecognized kernel version")
-	}
 
-	kernel, err := strconv.Atoi(tmp2[0])
-	if err != nil {
-		return nil, err
+	if len(tmp2) > 0 {
+		kernel, err = strconv.Atoi(tmp2[0])
+		if err != nil {
+			return nil, err
+		}
 	}
 
-	major, err := strconv.Atoi(tmp2[1])
-	if err != nil {
-		return nil, err
+	if len(tmp2) > 1 {
+		major, err = strconv.Atoi(tmp2[1])
+		if err != nil {
+			return nil, err
+		}
 	}
 
-	minor, err := strconv.Atoi(tmp2[2])
-	if err != nil {
-		return nil, err
+	if len(tmp2) > 2 {
+		minor, err = strconv.Atoi(tmp2[2])
+		if err != nil {
+			return nil, err
+		}
 	}
 
-	flavor := tmp[1]
+	if len(tmp) == 2 {
+		flavor = tmp[1]
+	} else {
+		flavor = ""
+	}
 
 	return &KernelVersionInfo{
 		Kernel: kernel,