From 5d984e7751d63a5b8d5bf01c99522a836ea6253c Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Fri, 14 Jul 2006 01:50:51 +0000 Subject: [PATCH] Validate that sigar.jar is binary compatible with the native library --- ChangeLog | 4 ++ .../java/src/org/hyperic/sigar/Sigar.java | 46 +++++++++++++++---- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index a3fcfd1e..039480a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2006-07-13 Doug MacEachern + + * Validate that sigar.jar is binary compatible with the native library + 2006-07-11 Doug MacEachern * Port linux impl to ppc64 arch diff --git a/bindings/java/src/org/hyperic/sigar/Sigar.java b/bindings/java/src/org/hyperic/sigar/Sigar.java index 491ef1e7..fa2b04d9 100644 --- a/bindings/java/src/org/hyperic/sigar/Sigar.java +++ b/bindings/java/src/org/hyperic/sigar/Sigar.java @@ -7,6 +7,7 @@ import java.io.InputStreamReader; import java.util.List; import java.util.Map; +import java.util.StringTokenizer; import org.hyperic.jni.ArchLoaderException; import org.hyperic.jni.ArchNotSupportedException; @@ -60,10 +61,14 @@ public class Sigar implements SigarProxy { private Cpu[] lastCpuList; static { - boolean loaded = false; + String nativeVersion = "unknown"; + String nativeBuildDate = "unknown"; + try { loadLibrary(); - loaded = true; + nativeVersion = getNativeVersion(); + nativeBuildDate = getNativeBuildDate(); + checkVersion(nativeVersion); } catch (SigarException e) { loadError = e.getMessage(); try { @@ -74,12 +79,37 @@ public class Sigar implements SigarProxy { e.printStackTrace(); } } - if (loaded) { - NATIVE_VERSION_STRING = getNativeVersion(); - NATIVE_BUILD_DATE = getNativeBuildDate(); - } - else { - NATIVE_VERSION_STRING = NATIVE_BUILD_DATE = "N/A"; + + NATIVE_VERSION_STRING = nativeVersion; + NATIVE_BUILD_DATE = nativeBuildDate; + } + + private static void checkVersion(String nativeVersionString) + throws SigarException { + + StringTokenizer javaVersion = + new StringTokenizer(VERSION_STRING, "."); + StringTokenizer nativeVersion = + new StringTokenizer(nativeVersionString, "."); + + String[] desc = { "major", "minor", "maint" }; + + for (int i=0; i