sleep(1);
}
-void kds_s2000w_handler_open(const char* devicename, void** handle)
+handler* init_handler()
{
- debug_printf(ALL, "kds_s2000w_handler_open");
- if (strcmp(devicename, "kds_s2000w_net") != 0)
- return;
-
handler* h = malloc(sizeof(handler));
h->current_scan_status = malloc(sizeof(scan_status));
h->current_metadata = malloc(sizeof(metadata));
h->read_info->readed_bytes_per_line = 0;
h->read_info->readed_lines = 0;
+ return h;
+}
+
+void free_handler(handler* h)
+{
+ free(h->current_scan_status);
+ h->current_scan_status = NULL;
+ free(h->current_metadata->image);
+ h->current_metadata->image = NULL;
+ free(h->current_metadata);
+ h->current_metadata = NULL;
+ free(h->read_info);
+ h->read_info = NULL;
+ free(h);
+ h = NULL;
+}
+
+void kds_s2000w_handler_open(const char* devicename, void** handle)
+{
+ debug_printf(ALL, "kds_s2000w_handler_open");
+ if (strcmp(devicename, "kds_s2000w_net") != 0)
+ return;
+
+ handler* h = init_handler();
*handle = h;
init_gamma_table();
kds_s2000w_client_close_session(h->sessionid);
h->sessionid = 0;
- free(h->current_scan_status);
- 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);
+ free_handler(h);
h = NULL;
}
readinfo* read_info;
} handler;
+handler* init_handler();
+void free_handler(handler* h);
void kds_s2000w_handler_open(const char* devicename, void** handle);
void kds_s2000w_handler_close(void* handle);
void kds_s2000w_handler_get_option(void* handle, int option, void* value);
sleep(1);
kds_s2000w_handler_open("kds_s2000w_net", handle);
return SANE_STATUS_CANCELLED;
- }
+ }
- 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->current_metadata->image != NULL) {
+ 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->readed_lines >= h->current_metadata->lines) {
*length = 0;
}
END_TEST
+START_TEST(sane_kds_s2000w_net_read_without_data)
+{
+ int length = 0;
+ handler* h = init_handler();
+ char* dataptr = malloc(sizeof(char));
+
+ SANE_Status status = _sane_kds_s2000w_net_read(h, dataptr, 65536, &length);
+
+ ck_assert_int_eq(status, SANE_STATUS_EOF);
+
+ free(dataptr);
+ dataptr = NULL;
+ free_handler(h);
+ h = NULL;
+}
+END_TEST
+
+START_TEST(sane_kds_s2000w_net_read_empty_image)
+{
+ int length = 0;
+ handler* h = init_handler();
+ h->current_metadata->size = 1;
+ char* image = malloc(sizeof(char));
+ image[0] = 0;
+ h->current_metadata->image = image;
+ char* dataptr = malloc(sizeof(char));
+
+ SANE_Status status = _sane_kds_s2000w_net_read(h, dataptr, 65536, &length);
+
+ ck_assert_int_eq(status, SANE_STATUS_EOF);
+
+ free(dataptr);
+ dataptr = NULL;
+ image = NULL;
+ free_handler(h);
+ h = NULL;
+}
+END_TEST
+
START_TEST(sane_kds_s2000w_net_read_all_lines_test)
{
handler h;
TCase* net_read = tcase_create("read");
tcase_add_test(net_read, sane_kds_s2000w_net_find_first_data_byte_test);
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);