tests: fix checking the kernel version
authorBartosz Golaszewski <bartekgola@gmail.com>
Thu, 6 Jul 2017 08:41:15 +0000 (10:41 +0200)
committerBartosz Golaszewski <bartekgola@gmail.com>
Thu, 6 Jul 2017 09:03:44 +0000 (11:03 +0200)
Previous check was incorrect and would break at major version change.

Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
tests/gpiod-test.c

index c24bdee82e6ede4b8550890bfa45e5cc735f4576..56c8326c6d4cb7a906633b8221e1c3b1be2419c0 100644 (file)
 
 static const char mockup_devpath[] = "/devices/platform/gpio-mockup/gpiochip";
 
+static const unsigned int min_kern_major = 4;
+static const unsigned int min_kern_minor = 11;
+static const unsigned int min_kern_release = 0;
+
 struct mockup_chip {
        char *path;
        char *name;
@@ -690,24 +694,47 @@ int test_tool_exit_status(void)
 
 static void check_kernel(void)
 {
-       int status, version, patchlevel;
+       unsigned int major, minor, release;
        struct utsname un;
+       int rv;
 
        msg("checking the linux kernel version");
 
-       status = uname(&un);
-       if (status)
+       rv = uname(&un);
+       if (rv)
                die_perr("uname");
 
-       status = sscanf(un.release, "%d.%d", &version, &patchlevel);
-       if (status != 2)
+       rv = sscanf(un.release, "%u.%u.%u", &major, &minor, &release);
+       if (rv != 3)
                die("error reading kernel release version");
 
-       if (version < 4 || patchlevel < 11)
-               die("linux kernel version must be at least v4.11 - got v%d.%d",
-                   version, patchlevel);
+       if (major < min_kern_major) {
+               goto bad_version;
+       } else if (major > min_kern_major) {
+               goto good_version;
+       } else {
+               if (minor < min_kern_minor) {
+                       goto bad_version;
+               } else if (minor > min_kern_minor) {
+                       goto good_version;
+               } else {
+                       if (release < min_kern_release)
+                               goto bad_version;
+                       else
+                               goto good_version;
+               }
+       }
+
+good_version:
+       msg("kernel release is v%u.%u.%u - ok to run tests",
+           major, minor, release);
+
+       return;
 
-       msg("kernel release is v%d.%d - ok to run tests", version, patchlevel);
+bad_version:
+       die("linux kernel version must be at least v%u.%u.%u - got v%u.%u.%u",
+           min_kern_major, min_kern_minor, min_kern_release,
+           major, minor, release);
 }
 
 static void check_gpio_mockup(void)