Skip to content
Snippets Groups Projects
Commit 388c6e45 authored by APriestman's avatar APriestman
Browse files

Fixed bug on cleanup after config file error

parent 3060cb6c
No related branches found
No related tags found
No related merge requests found
...@@ -615,26 +615,28 @@ static void ...@@ -615,26 +615,28 @@ static void
static void static void
yaffscache_objects_free(YAFFSFS_INFO *yfs) yaffscache_objects_free(YAFFSFS_INFO *yfs)
{ {
YaffsCacheObject *obj = yfs->cache_objects; if((yfs != NULL) && (yfs->cache_objects != NULL)){
while(obj != NULL) { YaffsCacheObject *obj = yfs->cache_objects;
YaffsCacheObject *to_free = obj; while(obj != NULL) {
YaffsCacheObject *to_free = obj;
YaffsCacheVersion *ver = obj->yco_latest;
while(ver != NULL) {
YaffsCacheVersion *v_to_free = ver;
ver = ver->ycv_prior;
free(v_to_free);
}
YaffsCacheVersion *ver = obj->yco_latest; obj = obj->yco_next;
while(ver != NULL) { free(to_free);
YaffsCacheVersion *v_to_free = ver;
ver = ver->ycv_prior;
free(v_to_free);
} }
obj = obj->yco_next;
free(to_free);
} }
} }
static void static void
yaffscache_chunks_free(YAFFSFS_INFO *yfs) yaffscache_chunks_free(YAFFSFS_INFO *yfs)
{ {
if(yfs->chunkMap != NULL){ if((yfs != NULL) && (yfs->chunkMap != NULL)){
// Free the YaffsCacheChunks in each ChunkGroup // Free the YaffsCacheChunks in each ChunkGroup
std::map<unsigned int,YaffsCacheChunkGroup>::iterator iter; std::map<unsigned int,YaffsCacheChunkGroup>::iterator iter;
for( iter = yfs->chunkMap->begin(); iter != yfs->chunkMap->end(); ++iter ) { for( iter = yfs->chunkMap->begin(); iter != yfs->chunkMap->end(); ++iter ) {
...@@ -649,7 +651,7 @@ static void ...@@ -649,7 +651,7 @@ static void
// Free the map // Free the map
yfs->chunkMap->clear(); yfs->chunkMap->clear();
delete yfs->chunkMap; delete yfs->chunkMap;
} }
} }
...@@ -2455,20 +2457,18 @@ static uint8_t ...@@ -2455,20 +2457,18 @@ static uint8_t
static void static void
yaffsfs_close(TSK_FS_INFO *fs) yaffsfs_close(TSK_FS_INFO *fs)
{ {
YAFFSFS_INFO *yfs = (YAFFSFS_INFO *)fs; if(fs != NULL){
YAFFSFS_INFO *yfs = (YAFFSFS_INFO *)fs;
fs->tag = 0; fs->tag = 0;
// Walk and free the cache structures // Walk and free the cache structures
yaffscache_objects_free(yfs); yaffscache_objects_free(yfs);
fprintf(stderr, "After objects free\n"); yaffscache_chunks_free(yfs);
fflush(stderr);
yaffscache_chunks_free(yfs);
fprintf(stderr, "After chunks free\n");
//tsk_deinit_lock(&yaffsfs->lock); //tsk_deinit_lock(&yaffsfs->lock);
tsk_fs_free(fs);
tsk_fs_free(fs); }
} }
typedef struct _dir_open_cb_args { typedef struct _dir_open_cb_args {
...@@ -2902,8 +2902,8 @@ TSK_FS_INFO * ...@@ -2902,8 +2902,8 @@ TSK_FS_INFO *
yaffs2_open(TSK_IMG_INFO * img_info, TSK_OFF_T offset, yaffs2_open(TSK_IMG_INFO * img_info, TSK_OFF_T offset,
TSK_FS_TYPE_ENUM ftype, uint8_t test) TSK_FS_TYPE_ENUM ftype, uint8_t test)
{ {
YAFFSFS_INFO *yaffsfs; YAFFSFS_INFO *yaffsfs = NULL;
TSK_FS_INFO *fs; TSK_FS_INFO *fs = NULL;
const unsigned int psize = img_info->page_size; const unsigned int psize = img_info->page_size;
const unsigned int ssize = img_info->spare_size; const unsigned int ssize = img_info->spare_size;
YaffsHeader * first_header = NULL; YaffsHeader * first_header = NULL;
...@@ -2923,6 +2923,8 @@ TSK_FS_INFO * ...@@ -2923,6 +2923,8 @@ TSK_FS_INFO *
if ((yaffsfs = (YAFFSFS_INFO *) tsk_fs_malloc(sizeof(YAFFSFS_INFO))) == NULL) if ((yaffsfs = (YAFFSFS_INFO *) tsk_fs_malloc(sizeof(YAFFSFS_INFO))) == NULL)
return NULL; return NULL;
yaffsfs->cache_objects = NULL;
yaffsfs->chunkMap = NULL;
// Read config file (if it exists) // Read config file (if it exists)
config_file_status = yaffs_load_config_file(img_info, configParams); config_file_status = yaffs_load_config_file(img_info, configParams);
...@@ -3096,7 +3098,6 @@ TSK_FS_INFO * ...@@ -3096,7 +3098,6 @@ TSK_FS_INFO *
*/ */
//tsk_init_lock(&yaffsfs->lock); //tsk_init_lock(&yaffsfs->lock);
yaffsfs->chunkMap = new std::map<uint32_t, YaffsCacheChunkGroup>; yaffsfs->chunkMap = new std::map<uint32_t, YaffsCacheChunkGroup>;
yaffsfs->cache_objects = NULL;
yaffsfs_cache_fs(yaffsfs); yaffsfs_cache_fs(yaffsfs);
if (tsk_verbose) { if (tsk_verbose) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment