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 @@
<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" />
......
......@@ -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() {
......
......@@ -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());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment