19 package org.sleuthkit.datamodel;
22 import java.io.FileOutputStream;
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.io.OutputStream;
36 public static final String[]
EXTS =
new String[]{
".so",
".dylib",
".dll",
".jnilib"};
37 private static final String TSK_TEMP_OVERRIDE =
"tsk.tmpdir";
38 private static final String JAVA_TEMP =
"java.io.tmpdir";
53 private final String name;
54 private final String unixName;
56 Lib(String name, String unixName) {
58 this.unixName = unixName;
78 System.out.println(
"SleuthkitJNI: failed to load " +
Lib.
TSK_JNI.getLibName());
91 private static String getPlatform() {
92 String os = System.getProperty(
"os.name").toLowerCase();
95 }
else if (LibraryUtils.isMac()) {
97 }
else if (LibraryUtils.isLinux()) {
101 String arch = System.getProperty(
"os.arch");
102 return arch.toLowerCase() +
"/" + os.toLowerCase();
110 private static boolean isWindows() {
111 return System.getProperty(
"os.name").toLowerCase().contains(
"windows");
119 private static boolean isMac() {
120 return System.getProperty(
"os.name").toLowerCase().contains(
"mac");
128 private static boolean isLinux() {
129 return System.getProperty(
"os.name").equals(
"Linux");
139 private static boolean loadNativeLibFromTskJar(Lib library) {
140 String libName = library.getLibName();
142 StringBuilder pathInJarBase =
new StringBuilder();
143 pathInJarBase.append(
"/NATIVELIBS/");
144 pathInJarBase.append(getPlatform());
145 pathInJarBase.append(
"/");
146 pathInJarBase.append(libName);
149 String libExt = null;
150 for (String ext : EXTS) {
151 urlInJar = SleuthkitJNI.class.getResource(pathInJarBase.toString() + ext);
152 if (urlInJar != null) {
158 if (urlInJar == null) {
159 System.out.println(
"Library not found in jar (" + libName +
")");
165 String userName = System.getProperty(
"user.name");
166 String tempDir = System.getProperty(TSK_TEMP_OVERRIDE, System.getProperty(JAVA_TEMP));
167 File tempLibFile = getTempFile(tempDir, libName, userName, libExt);
173 for (Lib l : Lib.values()) {
174 String ext = getExtByPlatform();
176 java.io.File f =
new java.io.File(l.getLibName() + ext);
182 java.io.File fUnix =
new java.io.File(l.getUnixName() + ext);
184 if (fUnix.exists()) {
191 if (tempLibFile.exists()) {
192 if (tempLibFile.delete() ==
false) {
193 System.out.println(
"Error deleting old native library. Is the app already running? (" + tempLibFile.toString() +
")");
199 InputStream in = urlInJar.openStream();
200 OutputStream out =
new FileOutputStream(tempLibFile);
202 byte[] buffer =
new byte[1024];
204 while ((length = in.read(buffer)) > 0) {
205 out.write(buffer, 0, length);
211 System.load(tempLibFile.getAbsolutePath());
212 }
catch (IOException e) {
214 System.out.println(
"Error loading library: " + e.getMessage());
231 static File getTempFile(String tempDir, String libName, String userName, String libExt) {
232 StringBuilder pathToTempFile =
new StringBuilder();
233 pathToTempFile.append(tempDir);
234 pathToTempFile.append(java.io.File.separator);
235 pathToTempFile.append(libName);
236 pathToTempFile.append(
"_");
237 pathToTempFile.append(userName);
238 pathToTempFile.append(libExt);
239 java.io.File tempLibFile =
new java.io.File(pathToTempFile.toString());
251 static String getExtByPlatform() {
254 }
else if (isMac()) {
static boolean loadSleuthkitJNI()
Lib(String name, String unixName)
static final String[] EXTS