libudfread | branch: master | Petri Hintukainen <[email protected]> | Tue Jun 21 22:59:01 2016 +0300| [a209bb593f9ac9a4a1d7e81c71ce104d198db182] | committer: Petri Hintukainen
Implement reading files with unallocated / unwritten blocks > http://git.videolan.org/gitweb.cgi/libudfread.git/?a=commit;h=a209bb593f9ac9a4a1d7e81c71ce104d198db182 --- src/udfread.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/udfread.c b/src/udfread.c index 73947d7..df0111d 100644 --- a/src/udfread.c +++ b/src/udfread.c @@ -1414,10 +1414,21 @@ uint32_t udfread_read_blocks(UDFFILE *p, void *buf, uint32_t file_block, uint32_ for (i = 0; i < num_blocks; i++) { uint32_t lba = _file_lba(p, file_block + i); uint8_t *block = (uint8_t *)buf + UDF_BLOCK_SIZE * i; + udf_trace("map block %u to lba %u\n", file_block + i, lba); + if (!lba) { + /* unallocated/unwritten block or EOF */ + uint32_t file_blocks = (udfread_file_size(p) + UDF_BLOCK_SIZE - 1) / UDF_BLOCK_SIZE; + if (file_block + i >= file_blocks) { + udf_trace("zero-fill unallocated / unwritten block %u\n", file_block + i); + memset(block, 0, UDF_BLOCK_SIZE); + continue; + } + udf_error("block %u outside of file (size %u blocks)\n", file_block + i, file_blocks); break; } + if (_read_blocks(p->udf->input, lba, block, 1, flags) != 1) { break; } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
