Browse code

Make the kernel version detection more generic

Guillaume J. Charmes authored on 2013/04/23 03:39:56
Showing 1 changed files
... ...
@@ -407,7 +407,12 @@ type KernelVersionInfo struct {
407 407
 
408 408
 // FIXME: this doens't build on Darwin
409 409
 func GetKernelVersion() (*KernelVersionInfo, error) {
410
-	var uts syscall.Utsname
410
+	var (
411
+		uts                  syscall.Utsname
412
+		flavor               string
413
+		kernel, major, minor int
414
+		err                  error
415
+	)
411 416
 
412 417
 	if err := syscall.Uname(&uts); err != nil {
413 418
 		return nil, err
... ...
@@ -422,30 +427,34 @@ func GetKernelVersion() (*KernelVersionInfo, error) {
422 422
 	}
423 423
 
424 424
 	tmp := strings.SplitN(string(release), "-", 2)
425
-	if len(tmp) != 2 {
426
-		return nil, fmt.Errorf("Unrecognized kernel version")
427
-	}
428 425
 	tmp2 := strings.SplitN(tmp[0], ".", 3)
429
-	if len(tmp2) != 3 {
430
-		return nil, fmt.Errorf("Unrecognized kernel version")
431
-	}
432 426
 
433
-	kernel, err := strconv.Atoi(tmp2[0])
434
-	if err != nil {
435
-		return nil, err
427
+	if len(tmp2) > 0 {
428
+		kernel, err = strconv.Atoi(tmp2[0])
429
+		if err != nil {
430
+			return nil, err
431
+		}
436 432
 	}
437 433
 
438
-	major, err := strconv.Atoi(tmp2[1])
439
-	if err != nil {
440
-		return nil, err
434
+	if len(tmp2) > 1 {
435
+		major, err = strconv.Atoi(tmp2[1])
436
+		if err != nil {
437
+			return nil, err
438
+		}
441 439
 	}
442 440
 
443
-	minor, err := strconv.Atoi(tmp2[2])
444
-	if err != nil {
445
-		return nil, err
441
+	if len(tmp2) > 2 {
442
+		minor, err = strconv.Atoi(tmp2[2])
443
+		if err != nil {
444
+			return nil, err
445
+		}
446 446
 	}
447 447
 
448
-	flavor := tmp[1]
448
+	if len(tmp) == 2 {
449
+		flavor = tmp[1]
450
+	} else {
451
+		flavor = ""
452
+	}
449 453
 
450 454
 	return &KernelVersionInfo{
451 455
 		Kernel: kernel,