diff options
Diffstat (limited to 'lib/sqfs/data_reader.c')
| -rw-r--r-- | lib/sqfs/data_reader.c | 15 | 
1 files changed, 9 insertions, 6 deletions
| diff --git a/lib/sqfs/data_reader.c b/lib/sqfs/data_reader.c index c3fc1b9..3f0cd74 100644 --- a/lib/sqfs/data_reader.c +++ b/lib/sqfs/data_reader.c @@ -131,7 +131,9 @@ static void data_reader_destroy(sqfs_object_t *obj)  {  	sqfs_data_reader_t *data = (sqfs_data_reader_t *)obj; -	sqfs_destroy(data->frag_tbl); +	sqfs_drop(data->cmp); +	sqfs_drop(data->file); +	sqfs_drop(data->frag_tbl);  	free(data->data_block);  	free(data->frag_block);  	free(data); @@ -170,13 +172,14 @@ static sqfs_object_t *data_reader_copy(const sqfs_object_t *obj)  		       data->frag_blk_size);  	} -	/* XXX: file and cmp aren't deep-copied becaues data -	        doesn't own them either. */ +	/* duplicate references */ +	copy->file = sqfs_grab(copy->file); +	copy->cmp = sqfs_grab(copy->cmp);  	return (sqfs_object_t *)copy;  fail_fblk:  	free(copy->data_block);  fail_dblk: -	sqfs_destroy(copy->frag_tbl); +	sqfs_drop(copy->frag_tbl);  fail_ftbl:  	free(copy);  	return NULL; @@ -204,9 +207,9 @@ sqfs_data_reader_t *sqfs_data_reader_create(sqfs_file_t *file,  		return NULL;  	} -	data->file = file; +	data->file = sqfs_grab(file);  	data->block_size = block_size; -	data->cmp = cmp; +	data->cmp = sqfs_grab(cmp);  	return data;  } | 
