Docker-DCO-1.1-Signed-off-by: Andrew Page <admwiggin@gmail.com> (github: tianon)
| ... | ... |
@@ -606,16 +606,22 @@ func GetKernelVersion() (*KernelVersionInfo, error) {
|
| 606 | 606 |
func ParseRelease(release string) (*KernelVersionInfo, error) {
|
| 607 | 607 |
var ( |
| 608 | 608 |
kernel, major, minor, parsed int |
| 609 |
- flavor string |
|
| 609 |
+ flavor, partial string |
|
| 610 | 610 |
) |
| 611 | 611 |
|
| 612 | 612 |
// Ignore error from Sscanf to allow an empty flavor. Instead, just |
| 613 | 613 |
// make sure we got all the version numbers. |
| 614 |
- parsed, _ = fmt.Sscanf(release, "%d.%d.%d%s", &kernel, &major, &minor, &flavor) |
|
| 615 |
- if parsed < 3 {
|
|
| 614 |
+ parsed, _ = fmt.Sscanf(release, "%d.%d%s", &kernel, &major, &partial) |
|
| 615 |
+ if parsed < 2 {
|
|
| 616 | 616 |
return nil, errors.New("Can't parse kernel version " + release)
|
| 617 | 617 |
} |
| 618 | 618 |
|
| 619 |
+ // sometimes we have 3.12.25-gentoo, but sometimes we just have 3.12-1-amd64 |
|
| 620 |
+ parsed, _ = fmt.Sscanf(partial, ".%d%s", &minor, &flavor) |
|
| 621 |
+ if parsed < 1 {
|
|
| 622 |
+ flavor = partial |
|
| 623 |
+ } |
|
| 624 |
+ |
|
| 619 | 625 |
return &KernelVersionInfo{
|
| 620 | 626 |
Kernel: kernel, |
| 621 | 627 |
Major: major, |
| ... | ... |
@@ -420,6 +420,7 @@ func TestParseRelease(t *testing.T) {
|
| 420 | 420 |
assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: ".longterm-1"}, 0)
|
| 421 | 421 |
assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "-19-generic"}, 0)
|
| 422 | 422 |
assertParseRelease(t, "3.12.8tag", &KernelVersionInfo{Kernel: 3, Major: 12, Minor: 8, Flavor: "tag"}, 0)
|
| 423 |
+ assertParseRelease(t, "3.12-1-amd64", &KernelVersionInfo{Kernel: 3, Major: 12, Minor: 0, Flavor: "-1-amd64"}, 0)
|
|
| 423 | 424 |
} |
| 424 | 425 |
|
| 425 | 426 |
func TestParsePortMapping(t *testing.T) {
|