h->current_metadata->valid = 0;
h->current_metadata->scanned_all_complete = 0;
h->current_metadata->image = NULL;
- h->read_info.scan_started = 0;
- 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->read_info = malloc(sizeof(readinfo));
+ h->read_info->scan_started = 0;
+ 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;
init_gamma_table();
image.size = 0;
h->current_scan_status = NULL;
free(h->current_metadata->image);
h->current_metadata->image = NULL;
+ free(h->read_info);
+ h->read_info = NULL;
free(h->current_metadata);
h->current_metadata = NULL;
free(h);
int state;
scan_status* current_scan_status;
metadata* current_metadata;
- readinfo read_info;
+ readinfo* read_info;
} handler;
void kds_s2000w_handler_open(const char* devicename, void** handle);
{
debug_printf(ALL, "sane_kds_s2000w_net_cancel");
handler* h = (handler*) handle;
- h->read_info.cancel = 1;
+ h->read_info->cancel = 1;
return;
}
{
debug_printf(ALL, "sane_kds_s2000w_net_get_parameters");
handler* h = (handler*) handle;
- if (!h->read_info.scan_started)
+ if (!h->read_info->scan_started)
return SANE_STATUS_INVAL;
for (int i = 0; i < 10; i++) {
params->pixels_per_line = mdata.pixels_per_line;
params->lines = mdata.lines;
params->depth = mdata.depth;
- h->read_info.read_size = 0;
- h->read_info.readed_bytes_per_line = 0;
- h->read_info.readed_lines = 0;
+ h->read_info->read_size = 0;
+ h->read_info->readed_bytes_per_line = 0;
+ h->read_info->readed_lines = 0;
debug_printf_int(DEBUG, "format", params->format);
debug_printf_int(DEBUG, "last frame", params->last_frame);
{
debug_printf(ALL, "sane_kds_s2000w_net_start");
handler* h = (handler*) handle;
- h->read_info.cancel = 0;
- h->read_info.scan_started = 1;
+ h->read_info->cancel = 0;
+ h->read_info->scan_started = 1;
kds_s2000w_handler_start_scan(handle);
return SANE_STATUS_GOOD;
}
{
debug_printf(ALL, "sane_kds_s2000w_net_read");
handler* h = (handler*) handle;
- if (h->read_info.cancel) {
- h->read_info.scan_started = 0;
+ if (h->read_info->cancel) {
+ h->read_info->scan_started = 0;
*length = 0;
kds_s2000w_handler_stop_scan(handle);
sleep(1);
}
int skip_header_bytes = _sane_kds_s2000w_net_find_first_data_byte(h->current_metadata->image);
- if (h->read_info.read_size <= 0)
- h->read_info.read_size += skip_header_bytes;
+ if (h->read_info->read_size <= 0)
+ h->read_info->read_size += skip_header_bytes;
- if (h->read_info.readed_lines >= h->current_metadata->lines) {
+ if (h->read_info->readed_lines >= h->current_metadata->lines) {
*length = 0;
- h->read_info.readed_lines = 0;
+ h->read_info->readed_lines = 0;
return SANE_STATUS_EOF;
}
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->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;
*length = maxlen;
- memcpy(data, h->current_metadata->image + h->read_info.read_size, *length);
+ 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;
+ h->read_info->readed_bytes_per_line += *length;
+ h->read_info->read_size += *length;
- 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++;
+ 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;
START_TEST(kds_s2000w_net_get_parameters_invalid_metdata)
{
handler h;
- h.read_info.scan_started = 1;
+ h.read_info = malloc(sizeof(readinfo));
+ h.read_info->scan_started = 1;
h.current_metadata = malloc(sizeof(metadata));
h.current_metadata->valid = 0;
SANE_Parameters* params = malloc(sizeof(SANE_Parameters));
params = NULL;
free(h.current_metadata);
h.current_metadata = NULL;
+ free(h.read_info);
+ h.read_info = NULL;
}
END_TEST
\ No newline at end of file
START_TEST(sane_kds_s2000w_net_read_cancel_test)
{
handler h;
- h.read_info.scan_started = 1;
- h.read_info.cancel = 1;
+ h.read_info = malloc(sizeof(readinfo));
+ h.read_info->scan_started = 1;
+ h.read_info->cancel = 1;
int* length = malloc(sizeof(int));
*length = 0;
free(length);
length = NULL;
+ free(h.read_info);
+ h.read_info = NULL;
}
END_TEST
START_TEST(sane_kds_s2000w_net_read_all_lines_test)
{
handler h;
- h.read_info.cancel = 0;
- h.read_info.read_size = 0;
- h.read_info.readed_lines = 0;
+ h.read_info = malloc(sizeof(readinfo));
+ 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;
}
ck_assert_int_eq(status, SANE_STATUS_EOF);
- ck_assert_int_eq(h.read_info.read_size, 53);
+ ck_assert_int_eq(h.read_info->read_size, 53);
free(dataptr);
dataptr = NULL;
h.current_metadata->image = NULL;
free(h.current_metadata);
h.current_metadata = NULL;
+ free(h.read_info);
+ h.read_info = NULL;
}
END_TEST
START_TEST(sane_kds_s2000w_net_read_test)
{
handler h;
- 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.read_info = malloc(sizeof(readinfo));
+ 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 = malloc(sizeof(metadata));
h.current_metadata->format = 0;
h.current_metadata->lines = 1;
ck_assert_int_eq(*length, 65536);
ck_assert_mem_eq(dataptr, image + 3, 65536);
- ck_assert_int_eq(h.read_info.read_size, 65539);
+ ck_assert_int_eq(h.read_info->read_size, 65539);
free(dataptr);
dataptr = NULL;
h.current_metadata->image = NULL;
free(h.current_metadata);
h.current_metadata = NULL;
+ free(h.read_info);
+ h.read_info = NULL;
}
END_TEST
START_TEST(sane_kds_s2000w_net_read_bytes_per_line_bigger_test)
{
handler h;
- 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.read_info = malloc(sizeof(readinfo));
+ 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 = malloc(sizeof(metadata));
h.current_metadata->format = 0;
h.current_metadata->lines = 1;
_sane_kds_s2000w_net_read(&h, dataptr, maxlen, length);
_sane_kds_s2000w_net_read(&h, dataptr, maxlen, length);
- ck_assert_int_eq(h.read_info.read_size, 95003);
+ ck_assert_int_eq(h.read_info->read_size, 95003);
free(dataptr);
dataptr = NULL;
h.current_metadata->image = NULL;
free(h.current_metadata);
h.current_metadata = NULL;
+ free(h.read_info);
+ h.read_info = NULL;
}
END_TEST
\ No newline at end of file