From 95657f3e5976d96073f7bbfe3a49192509999d1d Mon Sep 17 00:00:00 2001 From: Sean Anderson Date: Thu, 30 Dec 2021 15:16:08 -0500 Subject: [PATCH] libsparse: Split off most of sparse_file_read_normal into a helper function This carves out the core of sparse_file_read_normal and splits it off so it can be reused in the next patch. No functional change intended. Change-Id: Id00491fd7e5bb6fa28c517a0bb32b8b506539d4d --- libsparse/sparse_read.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/libsparse/sparse_read.cpp b/libsparse/sparse_read.cpp index c4c182358..c2f885968 100644 --- a/libsparse/sparse_read.cpp +++ b/libsparse/sparse_read.cpp @@ -410,12 +410,10 @@ static int sparse_file_read_sparse(struct sparse_file* s, SparseFileSource* sour return 0; } -static int sparse_file_read_normal(struct sparse_file* s, int fd) { +static int do_sparse_file_read_normal(struct sparse_file* s, int fd, uint32_t* buf, int64_t offset, + int64_t remain) { int ret; - uint32_t* buf = (uint32_t*)malloc(s->block_size); - unsigned int block = 0; - int64_t remain = s->len; - int64_t offset = 0; + unsigned int block = offset / s->block_size; unsigned int to_read; unsigned int i; bool sparse_block; @@ -429,7 +427,6 @@ static int sparse_file_read_normal(struct sparse_file* s, int fd) { ret = read_all(fd, buf, to_read); if (ret < 0) { error("failed to read sparse file"); - free(buf); return ret; } @@ -457,10 +454,21 @@ static int sparse_file_read_normal(struct sparse_file* s, int fd) { block++; } - free(buf); return 0; } +static int sparse_file_read_normal(struct sparse_file* s, int fd) { + int ret; + uint32_t* buf = (uint32_t*)malloc(s->block_size); + + if (!buf) + return -ENOMEM; + + ret = do_sparse_file_read_normal(s, fd, buf, 0, s->len); + free(buf); + return ret; +} + int sparse_file_read(struct sparse_file* s, int fd, bool sparse, bool crc) { if (crc && !sparse) { return -EINVAL;