From 1bf0ed16e5ed76f492997d1a081b65e27849ef48 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Mon, 29 Jul 2024 23:50:39 +0200 Subject: [PATCH] chore(inode_reader_v2): clean up and add some comments to read_internal --- src/dwarfs/internal/inode_reader_v2.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/dwarfs/internal/inode_reader_v2.cpp b/src/dwarfs/internal/inode_reader_v2.cpp index 6e564e8f..da92b1dc 100644 --- a/src/dwarfs/internal/inode_reader_v2.cpp +++ b/src/dwarfs/internal/inode_reader_v2.cpp @@ -244,6 +244,8 @@ inode_reader_::read_internal(uint32_t inode, size_t const size, auto offset = read_offset; if (offset < 0) { + // This is exactly how lseek(2) behaves when seeking before the start of + // the file. ec = std::make_error_code(std::errc::invalid_argument); return ranges; } @@ -290,7 +292,8 @@ inode_reader_::read_internal(uint32_t inode, size_t const size, } if (it == end) { - // offset beyond EOF; TODO: check if this should rather be -EINVAL + // Offset behind end of file. This is exactly how lseek(2) and read(2) + // behave when seeking behind the end of the file and reading past EOF. ec.clear(); return ranges; } @@ -302,13 +305,7 @@ inode_reader_::read_internal(uint32_t inode, size_t const size, size_t const copyoff = it->offset() + offset; size_t copysize = chunksize - offset; - // TODO: should this rather be an assertion? - if (copysize == 0) { - LOG_ERROR << "invalid zero-sized chunk"; - ec = std::make_error_code(std::errc::invalid_argument); - ranges.clear(); - break; - } + DWARFS_CHECK(copysize > 0, "unexpected zero-sized chunk"); if (num_read + copysize > size) { copysize = size - num_read;