From edd0f71e2ee3336d56bdf4ff8c7f9f2d81af9daa Mon Sep 17 00:00:00 2001
From: Brian Carrier <carrier@sleuthkit.org>
Date: Thu, 10 Oct 2013 14:03:25 -0400
Subject: [PATCH] Internal method to return names of images in IMG_INFO

---
 tsk/img/img_open.c  | 49 +++++++++++++++++++++++++++++++++++++++++++++
 tsk/img/tsk_img_i.h |  3 +++
 2 files changed, 52 insertions(+)

diff --git a/tsk/img/img_open.c b/tsk/img/img_open.c
index 51c4492b8..f4a570b67 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 ee8586bd5..6cd1a99a8 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
-- 
GitLab