}
// last frame
- if (h->read_info->readed_lines >= h->current_metadata->lines) {
+ if (h->read_info->read_size >= h->current_metadata->size) {
*length = 0;
h->current_metadata->is_last = 1;
- h->read_info->readed_lines = 0;
return SANE_STATUS_EOF;
}
// calc max length
int maxlen = max_length;
- if (h->current_metadata->bytes_per_line - h->read_info->readed_bytes_per_line < max_length)
- maxlen = h->current_metadata->bytes_per_line - h->read_info->readed_bytes_per_line;
+ if (h->current_metadata->size - h->read_info->read_size < max_length)
+ maxlen = h->current_metadata->size - h->read_info->read_size;
// read image
if (h->current_metadata->image != NULL) {
*length = maxlen;
memcpy(data, h->current_metadata->image + h->read_info->read_size, *length);
-
- h->read_info->readed_bytes_per_line += *length;
h->read_info->read_size += *length;
- // check is all bytes readed in one line
- if (h->read_info->readed_bytes_per_line >= h->current_metadata->bytes_per_line) {
- h->read_info->readed_bytes_per_line = 0;
- h->read_info->readed_lines++;
- }
-
return SANE_STATUS_GOOD;
}
char* image = malloc(sizeof(char));
image[0] = 0;
h->current_metadata->image = image;
+ h->current_metadata->size = 0;
char* dataptr = malloc(sizeof(char));
SANE_Status status = _sane_kds_s2000w_net_read(h, dataptr, 65536, &length);
}
END_TEST
-START_TEST(sane_kds_s2000w_net_read_all_lines_test)
-{
- handler* h = init_handler();
- h->read_info->cancel = 0;
- h->read_info->read_size = 0;
- h->read_info->readed_lines = 0;
- char* image = malloc(sizeof(char) * 53);
- for (int i = 0; i < 3; i++) {
- image[i] = 0x0a;
- }
- image[3] = 0xff;
- h->current_metadata->format = 0;
- h->current_metadata->image = image;
- h->current_metadata->bytes_per_line = 10;
- h->current_metadata->lines = 5;
-
- int length = 0;
-
- SANE_Int maxlen = 65536;
- char* dataptr = malloc(sizeof(char) * maxlen);
-
- SANE_Status status = 0;
- for (int i = 0; i < 6; i++) {
- status = _sane_kds_s2000w_net_read(h, dataptr, 65535, &length);
- }
-
- ck_assert_int_eq(status, SANE_STATUS_EOF);
- ck_assert_int_eq(h->read_info->read_size, 53);
-
- free(dataptr);
- dataptr = NULL;
- image = NULL;
- free_handler(h);
- h = NULL;
-}
-END_TEST
-
START_TEST(sane_kds_s2000w_net_read_test)
{
handler* h = init_handler();
h->read_info->cancel = 0;
h->read_info->read_size = 0;
- h->read_info->readed_bytes_per_line = 0;
- h->read_info->readed_lines = 0;
h->current_metadata->format = 0;
- h->current_metadata->lines = 1;
- h->current_metadata->bytes_per_line = 65536;
+ h->current_metadata->size = 65539;
char* image = malloc(sizeof(char) * 65539);
for (int i = 0; i < 3; i++) {
image[i] = 0x0a;
handler* h = init_handler();
h->read_info->cancel = 0;
h->read_info->read_size = 0;
- h->read_info->readed_bytes_per_line = 0;
- h->read_info->readed_lines = 0;
h->current_metadata->format = 0;
- h->current_metadata->lines = 1;
- h->current_metadata->bytes_per_line = 95000;
+ h->current_metadata->size = 95003;
char* image = malloc(sizeof(char) * 95003);
for (int i = 0; i < 3; i++) {
image[i] = 0x0a;
tcase_add_test(net_read, sane_kds_s2000w_net_read_cancel_test);
tcase_add_test(net_read, sane_kds_s2000w_net_read_without_data);
tcase_add_test(net_read, sane_kds_s2000w_net_read_empty_image);
- tcase_add_test(net_read, sane_kds_s2000w_net_read_all_lines_test);
tcase_add_test(net_read, sane_kds_s2000w_net_read_test);
tcase_add_test(net_read, sane_kds_s2000w_net_read_bytes_per_line_bigger_test);