From 91c2d5c287e92f30263e19c2664052ab0621f25b Mon Sep 17 00:00:00 2001
From: "Peter J. Martel" <pmartel@basistech.com>
Date: Thu, 27 Oct 2011 15:58:56 -0400
Subject: [PATCH] Added verbose logging JNI method.

---
 bindings/java/jni/dataModel_SleuthkitJNI.cpp  | 19 +++++++++++++++++++
 bindings/java/jni/dataModel_SleuthkitJNI.h    |  8 ++++++++
 .../org/sleuthkit/datamodel/SleuthkitJNI.java | 10 ++++++++++
 3 files changed, 37 insertions(+)

diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
index 89cd3e480..d2764cf50 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp
@@ -808,6 +808,24 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_getVersionNat(JNIEnv * env,
     return jversion;
 }
 
+/*
+ * Enable verbose logging and redirect stderr to the given log file.
+ * @param env pointer to java environment this was called from
+ * @param obj the java object this was called from
+ * @param logPath The log file to append to.
+ */
+JNIEXPORT void JNICALL
+Java_org_sleuthkit_datamodel_SleuthkitJNI_startVerboseLoggingNat
+    (JNIEnv * env, jclass obj, jstring logPath)
+{
+    jboolean isCopy;
+    char *str8 = (char *) env->GetStringUTFChars(logPath, &isCopy);
+    if (freopen(str8, "a", stderr) == NULL) {
+        throwTskError(env, "Couldn't open verbose log file for appending.");
+        return;
+    }
+    tsk_verbose++;
+}
 
 /*
  * Create an index for the given database path
@@ -825,6 +843,7 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexNat (JNIEnv * env,
     TSK_HDB_OPEN_ENUM flags = TSK_HDB_OPEN_NONE;
     TSK_HDB_INFO * temp = tsk_hdb_open(dbPathT, flags);
     if (temp == NULL) {
+        throwTskError(env);
         return;
     }
 
diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.h b/bindings/java/jni/dataModel_SleuthkitJNI.h
index 0171ec56c..99ac61619 100644
--- a/bindings/java/jni/dataModel_SleuthkitJNI.h
+++ b/bindings/java/jni/dataModel_SleuthkitJNI.h
@@ -15,6 +15,14 @@ extern "C" {
 JNIEXPORT jstring JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_getVersionNat
   (JNIEnv *, jclass);
 
+/*
+ * Class:     org_sleuthkit_datamodel_SleuthkitJNI
+ * Method:    startVerboseLoggingNat
+ * Signature: (Ljava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_startVerboseLoggingNat
+  (JNIEnv *, jclass, jstring);
+
 /*
  * Class:     org_sleuthkit_datamodel_SleuthkitJNI
  * Method:    newCaseDbNat
diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
index c7632db45..f7a59fc8f 100644
--- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
+++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java
@@ -25,6 +25,7 @@
 public class SleuthkitJNI {
 	//Native methods
 	private static native String getVersionNat();
+	private static native void startVerboseLoggingNat(String logPath);
 	
 	//database
 	private static native long newCaseDbNat(String dbPath) throws TskException;
@@ -224,6 +225,15 @@ static CaseDbHandle openCaseDb(String path) throws TskException {
 	public static String getVersion(){
 		return getVersionNat();
 	}
+	
+	/**
+	 * Enable verbose logging and redirect stderr to the given log file.
+	 * @return the version string
+	 */
+	public static void startVerboseLogging(String logPath) {
+		startVerboseLoggingNat(logPath);
+	}
+
 
 	/**
 	 * open the image and return the image info pointer
-- 
GitLab