diff --git a/tsk/img/img_open.c b/tsk/img/img_open.c index 51c4492b865ba7ed4a7c7c477fec3e8529d98adc..f4a570b6713ebdf6d2292e088d380de99591e275 100644 --- a/tsk/img/img_open.c +++ b/tsk/img/img_open.c @@ -418,3 +418,52 @@ tsk_img_close(TSK_IMG_INFO * a_img_info) } a_img_info->close(a_img_info); } + + +/** + * \internal + * Return the list of names for this open images. + * This is sort of a hack implementation and is internal only at this + * point. Returns pointers into the IMG_INFO structs and should not be + * modified or freed. + * @param a_img_info Image to pull names from + * @param a_num_imgs Will contain number of elements in the return array. + * @returns List of names. + */ +const TSK_TCHAR ** +tsk_img_get_names(TSK_IMG_INFO *a_img_info, int *a_num_imgs) +{ + if (a_img_info == NULL) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_IMG_ARG); + tsk_error_set_errstr("tsk_img_get_names: IMG_INFO is NULL"); + return NULL; + } + if (a_num_imgs == NULL) { + tsk_error_reset(); + tsk_error_set_errno(TSK_ERR_IMG_ARG); + tsk_error_set_errstr("tsk_img_get_names: a_num_imgs is NULL"); + return NULL; + } + *a_num_imgs = 0; + + switch (a_img_info->itype) { + case TSK_IMG_TYPE_RAW: + { + IMG_RAW_INFO *raw_info = (IMG_RAW_INFO *)a_img_info; + *a_num_imgs = raw_info->num_img; + return raw_info->images; + } +#if HAVE_LIBEWF + case TSK_IMG_TYPE_EWF_EWF: + { + IMG_EWF_INFO *ewf_info = (IMG_EWF_INFO *)a_img_info; + *a_num_imgs = ewf_info->num_imgs; + return ewf_info->images; + } + break; +#endif + default: + return NULL; + } +} diff --git a/tsk/img/tsk_img_i.h b/tsk/img/tsk_img_i.h index ee8586bd5030e9a8882923d3a2bc94962ae7b848..6cd1a99a8e20b9b57fd1478e39a75dfa2aa7535c 100644 --- a/tsk/img/tsk_img_i.h +++ b/tsk/img/tsk_img_i.h @@ -40,6 +40,9 @@ extern void tsk_img_free(void *); extern TSK_TCHAR **tsk_img_findFiles(const TSK_TCHAR * a_startingName, int *a_numFound); +extern const TSK_TCHAR ** + tsk_img_get_names(TSK_IMG_INFO *a_img_info, int *a_num_imgs); + #ifdef __cplusplus } #endif