]> granicus.if.org Git - procps-ng/commitdiff
library: Fix LINUX_VERSION macro
authorCraig Small <csmall@enc.com.au>
Sun, 1 May 2016 07:46:25 +0000 (17:46 +1000)
committerCraig Small <csmall@enc.com.au>
Sun, 1 May 2016 07:46:25 +0000 (17:46 +1000)
The previous commit did not take into account operator evaluation
order so always gave 0. Fixed the macro and added some checks for
the macro.

References:
 commit 9abf7d879d07c140a265b9f8efb642fdb5bd06b3

proc/test_version.c
proc/version.h

index ba01925ce2b413d0425d500e8addb77b9dc279fb..caa0677555ba18f91e3c10d909987c4926ed3f38 100644 (file)
@@ -30,7 +30,36 @@ int check_linux_version(void *data)
     return (procps_linux_version() > 0);
 }
 
+int check_conversion(void *data)
+{
+    testname = "LINUX_VERSION macro";
+    struct testvals {
+        int retval;
+        int major, minor, patch;
+    };
+
+    struct testvals *tv;
+    struct testvals tvs[] = {
+        { 132096, 2, 4, 0 },
+        { 132635, 2, 6, 27 },
+        { 199936, 3, 13, 0 },
+        { 263426, 4, 5, 2 },
+        { 0, 0, 0, 0}
+    };
+
+    for (tv=tvs; tv->major != 0; tv++)
+    {
+        if (LINUX_VERSION(tv->major, tv->minor, tv->patch) != tv->retval) {
+            fprintf(stderr, "Failed %d != %d\n", LINUX_VERSION(tv->major, tv->minor,
+                    tv->patch), tv->retval);
+            return 0;
+        }
+    }
+    return 1;
+}
+
 TestFunction test_funcs[] = {
+    check_conversion,
     check_linux_version,
     NULL
 };
index 611b4a7f2ee2712d046ecad1786b88eb28c5a430..3cde808cf0dbfcb910ac739672467c73b885df4c 100644 (file)
@@ -29,7 +29,7 @@ __BEGIN_DECLS
 int procps_linux_version(void);
 
 /* Convenience macros for composing/decomposing version codes */
-#define LINUX_VERSION(x,y,z)   (0x10000*((x)&0x7fff) + 0x100*((y)&0xff) + (z)&0xff)
+#define LINUX_VERSION(x,y,z)   (0x10000*((x)&0x7fff) + 0x100*((y)&0xff) + ((z)&0xff))
 #define LINUX_VERSION_MAJOR(x) (((x)>>16) & 0xFF)
 #define LINUX_VERSION_MINOR(x) (((x)>> 8) & 0xFF)
 #define LINUX_VERSION_PATCH(x) ( (x)      & 0xFF)