Skip to content
Snippets Groups Projects
Commit 7e0b5ad4 authored by Jeff Wallace's avatar Jeff Wallace
Browse files

Improvements to Library Loading functions, better error reporting.

parent 2ff4c1c5
No related branches found
No related tags found
No related merge requests found
...@@ -42,8 +42,11 @@ ...@@ -42,8 +42,11 @@
<property environment="env"/> <property environment="env"/>
<property name="jni.dylib" location="${basedir}/jni/.libs/libtsk_jni.dylib" /> <property name="jni.dylib" location="${basedir}/jni/.libs/libtsk_jni.dylib" />
<property name="jni.jnilib" value="libtsk_jni.jnilib" /> <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="${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> </target>
<!-- Non-OS X --> <!-- Non-OS X -->
...@@ -55,11 +58,31 @@ ...@@ -55,11 +58,31 @@
<target name="copyUnixLibs" depends="testTSKLibs" if="tsk_so.present"> <target name="copyUnixLibs" depends="testTSKLibs" if="tsk_so.present">
<property environment="env"/> <property environment="env"/>
<property name="jni.so" location="${basedir}/jni/.libs/libtsk_jni.so" /> <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="${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="${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="${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="${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="${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>
<target name="copyLibs" depends="copyUnixLibs,copyMacLibs" /> <target name="copyLibs" depends="copyUnixLibs,copyMacLibs" />
......
...@@ -100,7 +100,7 @@ private static boolean isMac() { ...@@ -100,7 +100,7 @@ private static boolean isMac() {
* @param library * @param library
* @return * @return
*/ */
public static void loadLibrary(Lib library) { public static boolean loadLibrary(Lib library) {
StringBuilder path = new StringBuilder(); StringBuilder path = new StringBuilder();
path.append("/NATIVELIBS/"); path.append("/NATIVELIBS/");
path.append(getPlatform()); path.append(getPlatform());
...@@ -120,32 +120,36 @@ public static void loadLibrary(Lib library) { ...@@ -120,32 +120,36 @@ public static void loadLibrary(Lib library) {
} }
} }
if(libraryURL != null) { if(libraryURL == null) {
// copy library to temp folder and load it return false;
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.
}
} }
// 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() { public static Lib[] getCRTLibs() {
......
...@@ -118,6 +118,7 @@ public class SleuthkitJNI { ...@@ -118,6 +118,7 @@ public class SleuthkitJNI {
//Linked library loading //Linked library loading
static { static {
boolean loaded = false;
if (LibraryUtils.isWindows()) { if (LibraryUtils.isWindows()) {
try { try {
// on windows force loading ms crt dependencies first // on windows force loading ms crt dependencies first
...@@ -127,9 +128,13 @@ public class SleuthkitJNI { ...@@ -127,9 +128,13 @@ public class SleuthkitJNI {
// We should update this if we officially switch to a new version of CRT/compiler // We should update this if we officially switch to a new version of CRT/compiler
for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) { 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) { } catch (UnsatisfiedLinkError e1) {
System.out.println(e1.toString()); System.out.println(e1.toString());
try { try {
...@@ -145,8 +150,12 @@ public class SleuthkitJNI { ...@@ -145,8 +150,12 @@ public class SleuthkitJNI {
for (LibraryUtils.Lib lib : LibraryUtils.getLibs()) { for (LibraryUtils.Lib lib : LibraryUtils.getLibs()) {
try { try {
LibraryUtils.loadLibrary(lib); loaded = LibraryUtils.loadLibrary(lib);
System.out.println("SleuthkitJNI: loaded " + lib); if(loaded) {
System.out.println("SleuthkitJNI: loaded " + lib);
} else {
System.out.println("SleuthkitJNI: failed to load " + lib);
}
} catch (UnsatisfiedLinkError e) { } catch (UnsatisfiedLinkError e) {
System.out.println("SleuthkitJNI: error loading " + lib + "library, " + e.toString()); System.out.println("SleuthkitJNI: error loading " + lib + "library, " + e.toString());
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment