diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp index 908c709b3020e7af04b06a74e7d0eab8dfa67c03..75ff69cb024e4c1f015dc58c483ad36881d8ef77 100644 --- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp +++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp @@ -2188,12 +2188,7 @@ JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_finishImageWrit (JNIEnv * env, jclass obj, jlong a_img_info) { // Set up the TSK_IMG_INFO object TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); - IMG_RAW_INFO *raw_info = (IMG_RAW_INFO*)img_info; - - if (raw_info->img_writer != NULL) { - return raw_info->img_writer->finish_image(raw_info->img_writer); - } - return -1; + return tsk_img_writer_finish(img_info); } /* diff --git a/tsk/img/img_writer.cpp b/tsk/img/img_writer.cpp index 2ec1ab322559d1d1fdbcb909f061e56fa1a17bf3..fc33af5852c935279ff9a78328a746ae6f9da997 100644 --- a/tsk/img/img_writer.cpp +++ b/tsk/img/img_writer.cpp @@ -601,7 +601,7 @@ static TSK_RETVAL_ENUM tsk_img_writer_finish_image(TSK_IMG_WRITER* img_writer) { * @param img_info the TSK_IMG_INFO object * @param outputFileName path to the VHD */ -TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR * outputFileName) { +TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO *img_info, const TSK_TCHAR *outputFileName) { #ifndef TSK_WIN32 return TSK_ERR; #else @@ -620,6 +620,13 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR * return TSK_ERR; } + if (img_info->itype != TSK_IMG_TYPE_RAW) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_IMG_OPEN); + tsk_error_set_errstr("tsk_img_writer_create: image writer can be used on only raw images"); + return TSK_ERR; + } + IMG_RAW_INFO* raw_info = (IMG_RAW_INFO *)img_info; /* This should not be run on split images*/ @@ -734,4 +741,25 @@ TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO * img_info, const TSK_TCHAR * #endif } +/** + * Read the remaining sectors into the VHD file. + */ +TSK_RETVAL_ENUM tsk_img_writer_finish(TSK_IMG_INFO *img_info) { + if (img_info->itype != TSK_IMG_TYPE_RAW) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_IMG_ARG); + tsk_error_set_errstr("tsk_img_writer_finish: image writer can be used on only raw images"); + return TSK_ERR; + } + + IMG_RAW_INFO* raw_info = (IMG_RAW_INFO *)img_info; + if (raw_info->img_writer == NULL) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_IMG_ARG); + tsk_error_set_errstr("tsk_img_writer_finish: image writer not set"); + return TSK_ERR; + } + + return raw_info->img_writer->finish_image(raw_info->img_writer); +} diff --git a/tsk/img/img_writer.h b/tsk/img/img_writer.h index bb7df269978f0caa74193a4bfef986ce0a9a42ab..68a890bb86bc1c56b1dc244e6a881ff2b3b7667f 100644 --- a/tsk/img/img_writer.h +++ b/tsk/img/img_writer.h @@ -19,7 +19,8 @@ #ifdef __cplusplus extern "C" { #endif - TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO* img_info, const TSK_TCHAR * outputFileName); + TSK_RETVAL_ENUM tsk_img_writer_create(TSK_IMG_INFO *img_info, const TSK_TCHAR * outputFileName); + TSK_RETVAL_ENUM tsk_img_writer_finish(TSK_IMG_INFO *img_info); enum IMG_WRITER_BLOCK_STATUS_ENUM { IMG_WRITER_BLOCK_STATUS_UNALLOC = 0,