From 9ef9e6ca28fc4b2c3571c6a0f5219b29fd460047 Mon Sep 17 00:00:00 2001 From: esaunders <esaunders@basistech.com> Date: Wed, 15 Jul 2015 13:50:46 -0400 Subject: [PATCH] Cherry pick and resolve conflicts for layout file seq fix --- tsk/auto/auto_db.cpp | 6 ++++-- tsk/auto/tsk_case_db.h | 3 ++- tsk/auto/tsk_db_sqlite.h | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tsk/auto/auto_db.cpp b/tsk/auto/auto_db.cpp index 5ede98c32..05ae5fc79 100644 --- a/tsk/auto/auto_db.cpp +++ b/tsk/auto/auto_db.cpp @@ -742,6 +742,7 @@ TSK_WALK_RET_ENUM TskAutoDb::fsWalkUnallocBlocksCb(const TSK_FS_BLOCK *a_block, unallocBlockWlkTrack->curRangeStart = a_block->addr; unallocBlockWlkTrack->prevBlock = a_block->addr; unallocBlockWlkTrack->size = 0; + unallocBlockWlkTrack->nextSequenceNo = 0; return TSK_WALK_CONT; } @@ -756,7 +757,7 @@ TSK_WALK_RET_ENUM TskAutoDb::fsWalkUnallocBlocksCb(const TSK_FS_BLOCK *a_block, + unallocBlockWlkTrack->fsInfo.offset; const uint64_t rangeSizeBytes = (1 + unallocBlockWlkTrack->prevBlock - unallocBlockWlkTrack->curRangeStart) * unallocBlockWlkTrack->fsInfo.block_size; - unallocBlockWlkTrack->ranges.push_back(TSK_DB_FILE_LAYOUT_RANGE(rangeStartOffset, rangeSizeBytes, 0)); + unallocBlockWlkTrack->ranges.push_back(TSK_DB_FILE_LAYOUT_RANGE(rangeStartOffset, rangeSizeBytes, unallocBlockWlkTrack->nextSequenceNo++)); // bookkeeping for the next range object unallocBlockWlkTrack->size += rangeSizeBytes; @@ -784,6 +785,7 @@ TSK_WALK_RET_ENUM TskAutoDb::fsWalkUnallocBlocksCb(const TSK_FS_BLOCK *a_block, unallocBlockWlkTrack->curRangeStart = a_block->addr; unallocBlockWlkTrack->size = 0; unallocBlockWlkTrack->ranges.clear(); + unallocBlockWlkTrack->nextSequenceNo = 0; //we don't know what the last unalloc block is in advance //and will handle the last range in addFsInfoUnalloc() @@ -839,7 +841,7 @@ TSK_RETVAL_ENUM TskAutoDb::addFsInfoUnalloc(const TSK_DB_FS_INFO & dbFsInfo) { // make range inclusive from curBlockStart to prevBlock const uint64_t byteStart = unallocBlockWlkTrack.curRangeStart * fsInfo->block_size + fsInfo->offset; const uint64_t byteLen = (1 + unallocBlockWlkTrack.prevBlock - unallocBlockWlkTrack.curRangeStart) * fsInfo->block_size; - unallocBlockWlkTrack.ranges.push_back(TSK_DB_FILE_LAYOUT_RANGE(byteStart, byteLen, 0)); + unallocBlockWlkTrack.ranges.push_back(TSK_DB_FILE_LAYOUT_RANGE(byteStart, byteLen, unallocBlockWlkTrack.nextSequenceNo++)); unallocBlockWlkTrack.size += byteLen; int64_t fileObjId = 0; diff --git a/tsk/auto/tsk_case_db.h b/tsk/auto/tsk_case_db.h index 634f12f3e..7452b17b4 100644 --- a/tsk/auto/tsk_case_db.h +++ b/tsk/auto/tsk_case_db.h @@ -126,7 +126,7 @@ class TskAutoDb:public TskAuto { //internal structure to keep track of temp. unalloc block range typedef struct _UNALLOC_BLOCK_WLK_TRACK { _UNALLOC_BLOCK_WLK_TRACK(const TskAutoDb & tskAutoDb, const TSK_FS_INFO & fsInfo, const int64_t fsObjId, int64_t chunkSize) - : tskAutoDb(tskAutoDb),fsInfo(fsInfo),fsObjId(fsObjId),curRangeStart(0), chunkSize(chunkSize), prevBlock(0), isStart(true) {} + : tskAutoDb(tskAutoDb),fsInfo(fsInfo),fsObjId(fsObjId),curRangeStart(0), chunkSize(chunkSize), prevBlock(0), isStart(true), nextSequenceNo(0) {} const TskAutoDb & tskAutoDb; const TSK_FS_INFO & fsInfo; const int64_t fsObjId; @@ -136,6 +136,7 @@ class TskAutoDb:public TskAuto { const int64_t chunkSize; TSK_DADDR_T prevBlock; bool isStart; + uint32_t nextSequenceNo; } UNALLOC_BLOCK_WLK_TRACK; uint8_t addImageDetails(const char *const images[], int); diff --git a/tsk/auto/tsk_db_sqlite.h b/tsk/auto/tsk_db_sqlite.h index 8eeae9b9a..9be964865 100755 --- a/tsk/auto/tsk_db_sqlite.h +++ b/tsk/auto/tsk_db_sqlite.h @@ -98,7 +98,7 @@ typedef struct _TSK_DB_FILE_LAYOUT_RANGE { int64_t fileObjId; ///< set to 0 if unknown (before it becomes a db object) uint64_t byteStart; uint64_t byteLen; - int sequence; + uint32_t sequence; //default comparator by sequence bool operator< (const struct _TSK_DB_FILE_LAYOUT_RANGE & rhs) const -- GitLab