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