aboutsummaryrefslogtreecommitdiff
path: root/lib/sqfs/data_reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqfs/data_reader.c')
-rw-r--r--lib/sqfs/data_reader.c15
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;
}