diff --git a/tsk/auto/auto.cpp b/tsk/auto/auto.cpp index 43f2ad9261d580632ab3dd1aaf42502b72b3f15f..b2438376b99f2588cf2566a9f71f4a00f20a725b 100755 --- a/tsk/auto/auto.cpp +++ b/tsk/auto/auto.cpp @@ -189,7 +189,7 @@ void * instead of opening a new copy. */ void -TskAuto::setExternalFileSystemList(std::list<TSK_FS_INFO *> fsInfoList) +TskAuto::setExternalFileSystemList(const std::list<TSK_FS_INFO *>& fsInfoList) { m_exteralFsInfoList.resize(fsInfoList.size()); m_exteralFsInfoList.assign(fsInfoList.begin(), fsInfoList.end()); @@ -661,6 +661,18 @@ uint8_t return 1; } + // If we already have an open copy of this file system, use it + for (auto itr = m_exteralFsInfoList.begin(); itr != m_exteralFsInfoList.end(); itr++) { + if ((*itr)->offset == a_start) { + TSK_FS_INFO *fs_info = *itr; + TSK_RETVAL_ENUM retval = findFilesInFsInt(fs_info, fs_info->root_inum); + if (m_errors.empty() == false) + return TSK_ERR; + else + return retval; + } + } + TSK_FS_INFO *fs_info; if ((fs_info = tsk_fs_open_img(m_img_info, a_start, a_ftype)) == NULL) { if (isCurVsValid() == false) { diff --git a/tsk/auto/tsk_auto.h b/tsk/auto/tsk_auto.h index c9f1d9a3a747ef9cb8da809ddc59ef35d8817be3..58ef0ce368a57cb4b3eebaef81201eae6e1dceef 100644 --- a/tsk/auto/tsk_auto.h +++ b/tsk/auto/tsk_auto.h @@ -100,7 +100,7 @@ class TskAuto { void setFileFilterFlags(TSK_FS_DIR_WALK_FLAG_ENUM); void setVolFilterFlags(TSK_VS_PART_FLAG_ENUM); - void setExternalFileSystemList(std::list<TSK_FS_INFO *> exteralFsInfoList); + void setExternalFileSystemList(const std::list<TSK_FS_INFO *>& exteralFsInfoList); /** * TskAuto calls this method before it processes the volume system that is found in an