diff options
Diffstat (limited to 'libartbase/base/utils.cc')
-rw-r--r-- | libartbase/base/utils.cc | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/libartbase/base/utils.cc b/libartbase/base/utils.cc index 2c95986809..aca7a0d47d 100644 --- a/libartbase/base/utils.cc +++ b/libartbase/base/utils.cc @@ -167,12 +167,17 @@ bool FlushCpuCaches(void* begin, void* end) { #if defined(__linux__) bool IsKernelVersionAtLeast(int reqd_major, int reqd_minor) { - struct utsname uts; - int major, minor; - CHECK_EQ(uname(&uts), 0); - CHECK_EQ(strcmp(uts.sysname, "Linux"), 0); - CHECK_EQ(sscanf(uts.release, "%d.%d:", &major, &minor), 2); - return major > reqd_major || (major == reqd_major && minor >= reqd_minor); + static auto version = []() -> std::pair<int, int> { + struct utsname uts; + int res, major, minor; + res = uname(&uts); + CHECK_EQ(res, 0); + CHECK_EQ(strcmp(uts.sysname, "Linux"), 0); + res = sscanf(uts.release, "%d.%d:", &major, &minor); + CHECK_EQ(res, 2); + return std::make_pair(major, minor); + }(); + return version >= std::make_pair(reqd_major, reqd_minor); } #endif |