return SANE_STATUS_EOF;
}
- int length_count = 0;
- while(length_count < max_length) {
- if (cancel) {
- scan_started = 0;
- *length = 0;
- kds_s2000w_handler_stop_scan();
- sleep(1);
- kds_s2000w_handler_close();
- sleep(1);
- kds_s2000w_handler_open();
- return SANE_STATUS_CANCELLED;
- }
-
- if (read_size >= current_metadata.size)
- break;
+ if (cancel) {
+ scan_started = 0;
+ *length = 0;
+ kds_s2000w_handler_stop_scan();
+ sleep(1);
+ kds_s2000w_handler_close();
+ sleep(1);
+ kds_s2000w_handler_open();
+ return SANE_STATUS_CANCELLED;
+ }
- data[length_count] = image_data[read_size];
- length_count++;
- read_size++;
+ if (read_size <= current_metadata.size - max_length) {
+ *length = max_length;
+ memcpy(data, current_metadata.image + read_size, *length);
+ } else {
+ *length = current_metadata.size - read_size;
+ memcpy(data, current_metadata.image + read_size, *length);
}
- *length = length_count;
+
+ read_size += *length;
+
printf("length: %i\n", *length);
printf("read size: %i\n", read_size);