libbluray | branch: master | hpi1 <[email protected]> | Sun Jun 26 19:19:22 2016 +0300| [b683a904f7d736c1874b6b85c23e0afdaaaa8796] | committer: hpi1
udf: improved error checks > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=b683a904f7d736c1874b6b85c23e0afdaaaa8796 --- src/libbluray/disc/udf_fs.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libbluray/disc/udf_fs.c b/src/libbluray/disc/udf_fs.c index e7c683c..bcb624c 100644 --- a/src/libbluray/disc/udf_fs.c +++ b/src/libbluray/disc/udf_fs.c @@ -159,7 +159,11 @@ static int _bi_close(struct udfread_block_input *bi_gen) static uint32_t _bi_size(struct udfread_block_input *bi_gen) { UDF_BI *bi = (UDF_BI *)bi_gen; - return file_size(bi->fp) / UDF_BLOCK_SIZE; + int64_t size = file_size(bi->fp); + if (size >= 0) { + return size / UDF_BLOCK_SIZE; + } + return 0; } static int _bi_read(struct udfread_block_input *bi_gen, uint32_t lba, void *buf, uint32_t nblocks, int flags) @@ -167,11 +171,12 @@ static int _bi_read(struct udfread_block_input *bi_gen, uint32_t lba, void *buf, (void)flags; UDF_BI *bi = (UDF_BI *)bi_gen; int got = -1; + int64_t pos = (int64_t)lba * UDF_BLOCK_SIZE; /* seek + read must be atomic */ bd_mutex_lock(&bi->mutex); - if (file_seek(bi->fp, SEEK_SET, (int64_t)lba * UDF_BLOCK_SIZE) >= 0) { + if (file_seek(bi->fp, SEEK_SET, pos) == pos) { int64_t bytes = file_read(bi->fp, (uint8_t*)buf, (int64_t)nblocks * UDF_BLOCK_SIZE); if (bytes > 0) { got = bytes / UDF_BLOCK_SIZE; _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
