- !resource_is_compressed(<e->resource_entry))
- {
- /* Reading raw resource contents or reading uncompressed
- * resource. */
- wimlib_assert(offset + size <= lte->resource_entry.size);
- offset += lte->resource_entry.offset;
- if (flags & WIMLIB_READ_RESOURCE_FLAG_SEEK_ONLY) {
- if (lte->resource_entry.size != 0) {
- u8 dummy;
- ret = full_pread(in_fd, &dummy, 1,
- offset + lte->resource_entry.size - 1);
- if (ret)
- goto read_error;
- }
- } else if (cb) {
- /* Send data to callback function */
- u8 buf[min(WIM_CHUNK_SIZE, size)];
- while (size) {
- size_t bytes_to_read = min(WIM_CHUNK_SIZE,
- size);
- ret = full_pread(in_fd, buf, bytes_to_read,
- offset);
- if (ret)
- goto read_error;
- ret = cb(buf, bytes_to_read, ctx_or_buf);
- if (ret)
- goto out;
- size -= bytes_to_read;
- offset += bytes_to_read;
- }
- } else {
- /* Send data directly to a buffer */
- ret = full_pread(in_fd, ctx_or_buf, size, offset);
- if (ret)
- goto read_error;
- }
- ret = 0;
- } else if (lte->is_pipable && !filedes_is_seekable(in_fd)) {
- /* Reading compressed, pipable resource from pipe. */
- ret = read_pipable_resource(lte, size, cb,
- ctx_or_buf, flags, offset);