struct raw_info {
int64_t offset; /* Current position in the file. */
+ int64_t unconsumed;
int end_of_file;
};
ssize_t avail;
info = (struct raw_info *)(a->format->data);
+
+ if (info->unconsumed) {
+ __archive_read_consume(a, info->unconsumed);
+ info->unconsumed = 0;
+ }
+
if (info->end_of_file)
return (ARCHIVE_EOF);
*size = avail;
*offset = info->offset;
info->offset += *size;
+ info->unconsumed = avail;
return (ARCHIVE_OK);
} else if (0 == avail) {
/* Record and return end-of-file. */
static int
archive_read_format_raw_read_data_skip(struct archive_read *a)
{
- (void)a; /* UNUSED */
+ struct raw_info *info = (struct raw_info *)(a->format->data);
+
+ if (info->unconsumed) {
+ __archive_read_consume(a, info->unconsumed);
+ info->unconsumed = 0;
+ }
+
return (ARCHIVE_OK);
}