/src/util-linux/lib/linux_version.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * No copyright is claimed. This code is in the public domain; do with |
3 | | * it what you wish. |
4 | | */ |
5 | | #include <stdio.h> |
6 | | #include <sys/utsname.h> |
7 | | |
8 | | #include "c.h" |
9 | | #include "linux_version.h" |
10 | | |
11 | | int get_linux_version (void) |
12 | 0 | { |
13 | 0 | static int kver = -1; |
14 | 0 | struct utsname uts; |
15 | 0 | int x = 0, y = 0, z = 0; |
16 | 0 | int n; |
17 | |
|
18 | 0 | if (kver != -1) |
19 | 0 | return kver; |
20 | 0 | if (uname(&uts)) |
21 | 0 | return kver = 0; |
22 | | |
23 | 0 | n = sscanf(uts.release, "%d.%d.%d", &x, &y, &z); |
24 | 0 | if (n < 1 || n > 3) |
25 | 0 | return kver = 0; |
26 | | |
27 | 0 | return kver = KERNEL_VERSION(x, y, z); |
28 | 0 | } |
29 | | |
30 | | #ifdef TEST_PROGRAM_LINUXVERSION |
31 | | # include <stdlib.h> |
32 | | int main(int argc, char *argv[]) |
33 | | { |
34 | | int rc = EXIT_FAILURE; |
35 | | |
36 | | if (argc == 1) { |
37 | | printf("Linux version: %d\n", get_linux_version()); |
38 | | rc = EXIT_SUCCESS; |
39 | | |
40 | | } else if (argc == 5) { |
41 | | const char *oper = argv[1]; |
42 | | |
43 | | int x = atoi(argv[2]), |
44 | | y = atoi(argv[3]), |
45 | | z = atoi(argv[4]); |
46 | | int kver = get_linux_version(); |
47 | | int uver = KERNEL_VERSION(x, y, z); |
48 | | |
49 | | if (strcmp(oper, "==") == 0) |
50 | | rc = kver == uver; |
51 | | else if (strcmp(oper, "<=") == 0) |
52 | | rc = kver <= uver; |
53 | | else if (strcmp(oper, ">=") == 0) |
54 | | rc = kver >= uver; |
55 | | else |
56 | | errx(EXIT_FAILURE, "unsupported operator"); |
57 | | |
58 | | if (rc) |
59 | | printf("match\n"); |
60 | | else |
61 | | printf("not-match [%d %s %d, x.y.z: %d.%d.%d]\n", |
62 | | kver, oper, uver, x, y, z); |
63 | | |
64 | | rc = rc ? EXIT_SUCCESS : EXIT_FAILURE; |
65 | | |
66 | | } else |
67 | | fprintf(stderr, "Usage:\n" |
68 | | " %s [<oper> <x> <y> <z>]\n" |
69 | | "supported operators:\n" |
70 | | " ==, <=, >=\n", |
71 | | program_invocation_short_name); |
72 | | |
73 | | return rc; |
74 | | } |
75 | | #endif |