... | ... |
@@ -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, |