Browse code

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.

Tianon Gravi authored on 2013/04/22 10:19:38
Showing 2 changed files
... ...
@@ -399,10 +399,10 @@ func CopyEscapable(dst io.Writer, src io.ReadCloser) (written int64, err error)
399 399
 }
400 400
 
401 401
 type KernelVersionInfo struct {
402
-	Kernel   int
403
-	Major    int
404
-	Minor    int
405
-	Specific int
402
+	Kernel int
403
+	Major  int
404
+	Minor  int
405
+	Flavor string
406 406
 }
407 407
 
408 408
 // FIXME: this doens't build on Darwin
... ...
@@ -445,21 +445,18 @@ func GetKernelVersion() (*KernelVersionInfo, error) {
445 445
 		return nil, err
446 446
 	}
447 447
 
448
-	specific, err := strconv.Atoi(strings.Split(tmp[1], "-")[0])
449
-	if err != nil {
450
-		return nil, err
451
-	}
448
+	flavor := tmp[1]
452 449
 
453 450
 	return &KernelVersionInfo{
454
-		Kernel:   kernel,
455
-		Major:    major,
456
-		Minor:    minor,
457
-		Specific: specific,
451
+		Kernel: kernel,
452
+		Major:  major,
453
+		Minor:  minor,
454
+		Flavor: flavor,
458 455
 	}, nil
459 456
 }
460 457
 
461 458
 func (k *KernelVersionInfo) String() string {
462
-	return fmt.Sprintf("%d.%d.%d-%d", k.Kernel, k.Major, k.Minor, k.Specific)
459
+	return fmt.Sprintf("%d.%d.%d-%s", k.Kernel, k.Major, k.Minor, k.Flavor)
463 460
 }
464 461
 
465 462
 // Compare two KernelVersionInfo struct.
... ...
@@ -483,11 +480,6 @@ func CompareKernelVersion(a, b *KernelVersionInfo) int {
483 483
 		return 1
484 484
 	}
485 485
 
486
-	if a.Specific < b.Specific {
487
-		return -1
488
-	} else if a.Specific > b.Specific {
489
-		return 1
490
-	}
491 486
 	return 0
492 487
 }
493 488
 
... ...
@@ -237,27 +237,27 @@ func assertKernelVersion(t *testing.T, a, b *KernelVersionInfo, result int) {
237 237
 
238 238
 func TestCompareKernelVersion(t *testing.T) {
239 239
 	assertKernelVersion(t,
240
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0},
241
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0},
240
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
241
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
242 242
 		0)
243 243
 	assertKernelVersion(t,
244
-		&KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0, Specific: 0},
245
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0},
244
+		&KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0},
245
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
246 246
 		-1)
247 247
 	assertKernelVersion(t,
248
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0},
249
-		&KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0, Specific: 0},
248
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
249
+		&KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0},
250 250
 		1)
251 251
 	assertKernelVersion(t,
252
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0},
253
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 16},
254
-		-1)
252
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "0"},
253
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "16"},
254
+		0)
255 255
 	assertKernelVersion(t,
256
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 5, Specific: 0},
257
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0},
256
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 5},
257
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
258 258
 		1)
259 259
 	assertKernelVersion(t,
260
-		&KernelVersionInfo{Kernel: 3, Major: 0, Minor: 20, Specific: 25},
261
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Specific: 0},
260
+		&KernelVersionInfo{Kernel: 3, Major: 0, Minor: 20, Flavor: "25"},
261
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "0"},
262 262
 		-1)
263 263
 }