/* Traverse the hierarchy inside the container */ void TskL01Extract::traverse(ewf::libewf_file_entry_t *parent) { static Poco::Path currPath; TskL01Extract::ArchivedFile fileInfo; fileInfo.entry = parent; fileInfo.type = getFileType(parent); fileInfo.size = getFileSize(parent); fileInfo.ctime = getEntryChangeTime(parent); fileInfo.crtime = getCreationTime(parent); fileInfo.atime = getAccessTime(parent); fileInfo.mtime = getModifiedTime(parent); std::string name = getName(parent); bool saveDirectory = false; if ((fileInfo.type == 'd') && !name.empty()) { saveDirectory = true; } if (saveDirectory) { currPath.pushDirectory(name); fileInfo.path = currPath; m_archivedFiles.push_back(fileInfo); } else if (fileInfo.type == 'f') { Poco::Path tempPath = currPath; tempPath.setFileName(name); fileInfo.path = tempPath; m_archivedFiles.push_back(fileInfo); } int num = 0; ewf::libewf_error_t *ewfError = NULL; ewf::libewf_file_entry_get_number_of_sub_file_entries(parent, &num, &ewfError); if (num > 0) { //recurse for (int i=0; i < num; ++i) { ewf::libewf_file_entry_t *child = NULL; ewfError = NULL; if (ewf::libewf_file_entry_get_sub_file_entry(parent, i, &child, &ewfError) == -1) { throw TskException("TskL01Extract::traverse - Error with libewf_file_entry_get_sub_file_entry: "); } traverse(child); } } if (saveDirectory) { currPath.popDirectory(); } }