diff --git a/bindings/java/build-unix.xml b/bindings/java/build-unix.xml index 55870ad910bf42b0c45491227e32b3698edb20ea..98c8e728241d501c9ef224dc28829220c3ba79e7 100644 --- a/bindings/java/build-unix.xml +++ b/bindings/java/build-unix.xml @@ -42,8 +42,11 @@ <property environment="env"/> <property name="jni.dylib" location="${basedir}/jni/.libs/libtsk_jni.dylib" /> <property name="jni.jnilib" value="libtsk_jni.jnilib" /> + <property name="mac.zlib" location="/usr/lib/libz.dylib"/> + <property name="mac.libewf" location="${env.LIBEWF_HOME}/libewf/.libs/libewf.dylib"/> <copy file="${jni.dylib}" tofile="${x86_64}/mac/${jni.jnilib}"/> - <copy file="${jni.dylib}" tofile="${amd64}/mac/${jni.jnilib}"/> + <copy file="${mac.libewf}" tofile="${x86_64}/mac/libewf.dylib"/> + <copy file="${mac.zlib}" tofile="${x86_64}/mac/zlib.dylib"/> </target> <!-- Non-OS X --> @@ -55,11 +58,31 @@ <target name="copyUnixLibs" depends="testTSKLibs" if="tsk_so.present"> <property environment="env"/> <property name="jni.so" location="${basedir}/jni/.libs/libtsk_jni.so" /> + <!-- check that this location is correct --> + <property name="unix.zlib" location="/usr/lib/libz.so"/> + <property name="zlib.so" value="zlib.so"/> + <property name="unix.libewf" location="${env.LIBEWF_HOME}/libewf/.libs/libewf.so"/> + <property name="libewf.so" value="libewf.so"/> + <!-- x86_64 --> <copy file="${jni.so}" tofile="${x86_64}/unix/libtsk_jni.so"/> + <copy file="${unix.zlib}" tofile="${x86_64}/unix/${zlib.so}"/> + <copy file="${unix.libewf}" tofile="${x86_64}/unix/${libewf.so}"/> + <!-- amd64 --> <copy file="${jni.so}" tofile="${amd64}/unix/libtsk_jni.so"/> + <copy file="${unix.zlib}" tofile="${amd64}/unix/${zlib.so}"/> + <copy file="${unix.libewf}" tofile="${amd64}/unix/${libewf.so}"/> + <!-- x86 --> <copy file="${jni.so}" tofile="${x86}/unix/libtsk_jni.so"/> + <copy file="${unix.zlib}" tofile="${x86}/unix/${zlib.so}"/> + <copy file="${unix.libewf}" tofile="${x86}/unix/${libewf.so}"/> + <!-- i386 --> <copy file="${jni.so}" tofile="${i386}/unix/libtsk_jni.so"/> + <copy file="${unix.zlib}" tofile="${i386}/unix/${zlib.so}"/> + <copy file="${unix.libewf}" tofile="${i386}/unix/${libewf.so}"/> + <!-- i586 --> <copy file="${jni.so}" tofile="${i586}/unix/libtsk_jni.so"/> + <copy file="${unix.zlib}" tofile="${i586}/unix/${zlib.so}"/> + <copy file="${unix.libewf}" tofile="${i586}/unix/${libewf.so}"/> </target> <target name="copyLibs" depends="copyUnixLibs,copyMacLibs" /> diff --git a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java index 263a402b824a09d7627d179ebea2c7b0671fd6d7..529b343c3efe73d6ce2e112457d17ece3ac79ff4 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java +++ b/bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java @@ -100,7 +100,7 @@ private static boolean isMac() { * @param library * @return */ - public static void loadLibrary(Lib library) { + public static boolean loadLibrary(Lib library) { StringBuilder path = new StringBuilder(); path.append("/NATIVELIBS/"); path.append(getPlatform()); @@ -120,32 +120,36 @@ public static void loadLibrary(Lib library) { } } - if(libraryURL != null) { - // copy library to temp folder and load it - try { - java.io.File libTemp = new java.io.File(System.getProperty("java.io.tmpdir") + libName + libExt); - - if(libTemp.exists()) { - // Delete old file - libTemp.delete(); - } - - InputStream in = libraryURL.openStream(); - OutputStream out = new FileOutputStream(libTemp); - - byte[] buffer = new byte[1024]; - int length; - while((length = in.read(buffer)) > 0) { - out.write(buffer, 0, length); - } - in.close(); - out.close(); - - System.load(libTemp.getAbsolutePath()); - } catch (IOException e) { - // Loading failed. - } + if(libraryURL == null) { + return false; } + + // copy library to temp folder and load it + try { + java.io.File libTemp = new java.io.File(System.getProperty("java.io.tmpdir") + libName + libExt); + + if(libTemp.exists()) { + // Delete old file + libTemp.delete(); + } + + InputStream in = libraryURL.openStream(); + OutputStream out = new FileOutputStream(libTemp); + + byte[] buffer = new byte[1024]; + int length; + while((length = in.read(buffer)) > 0) { + out.write(buffer, 0, length); + } + in.close(); + out.close(); + + System.load(libTemp.getAbsolutePath()); + } catch (IOException e) { + // Loading failed. + return false; + } + return true; } public static Lib[] getCRTLibs() { diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java index abdfa26d5503e01ef6dfb99ed7aefbd073c3ae3a..7d0708a44fbe7a323fee35b0003f7715c467582a 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java @@ -118,6 +118,7 @@ public class SleuthkitJNI { //Linked library loading static { + boolean loaded = false; if (LibraryUtils.isWindows()) { try { // on windows force loading ms crt dependencies first @@ -127,9 +128,13 @@ public class SleuthkitJNI { // We should update this if we officially switch to a new version of CRT/compiler for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) { - LibraryUtils.loadLibrary(crt); + loaded = LibraryUtils.loadLibrary(crt); + if(!loaded) { + System.out.println("SleuthkitJNI: failed to load " + crt.getLibName()); + } else { + System.out.println("SleuthkitJNI: loaded " + crt.getLibName()); + } } - System.out.println("Loaded CRT libraries"); } catch (UnsatisfiedLinkError e1) { System.out.println(e1.toString()); try { @@ -145,8 +150,12 @@ public class SleuthkitJNI { for (LibraryUtils.Lib lib : LibraryUtils.getLibs()) { try { - LibraryUtils.loadLibrary(lib); - System.out.println("SleuthkitJNI: loaded " + lib); + loaded = LibraryUtils.loadLibrary(lib); + if(loaded) { + System.out.println("SleuthkitJNI: loaded " + lib); + } else { + System.out.println("SleuthkitJNI: failed to load " + lib); + } } catch (UnsatisfiedLinkError e) { System.out.println("SleuthkitJNI: error loading " + lib + "library, " + e.toString()); }