handler* h = (handler*) handle;
- // max length
*length = h->image->size - h->read_info->read_size;
if (*length > max_length)
*length = max_length;
- // read image
- if (h->read_info->read_size < h->image->size) {
- memcpy(data, h->image->data + h->read_info->read_size, *length);
- h->read_info->read_size += *length;
+ if (h->read_info->read_size >= h->image->size) {
+ free(h->image->data);
+ h->image->data = NULL;
+ h->image->size = 0;
- return SANE_STATUS_GOOD;
+ *length = 0;
+ return SANE_STATUS_EOF;
}
- // last frame
- free(h->image->data);
- h->image->data = NULL;
- h->image->size = 0;
-
- *length = 0;
- return SANE_STATUS_EOF;
+ memcpy(data, h->image->data + h->read_info->read_size, *length);
+ h->read_info->read_size += *length;
+ return SANE_STATUS_GOOD;
}
SANE_Status _sane_kds_s2000w_net_set_io_mode(SANE_Handle handle,