Merge branch 'fix-statis-no-data' into 'master'

If no data then the status is NO-DOCS.

See merge request sane-project/backends!440
merge-requests/463/merge
Ordissimo 2020-05-15 08:59:36 +00:00
commit a05983ba28
2 zmienionych plików z 13 dodań i 4 usunięć

Wyświetl plik

@ -139,6 +139,7 @@ typedef struct capabilities
unsigned char *img_data; unsigned char *img_data;
long img_size; long img_size;
long img_read; long img_read;
size_t real_read;
SANE_Bool work; SANE_Bool work;
} capabilities_t; } capabilities_t;

Wyświetl plik

@ -43,8 +43,9 @@
static size_t static size_t
write_callback(void *str, size_t size, size_t nmemb, void *userp) write_callback(void *str, size_t size, size_t nmemb, void *userp)
{ {
size_t to_write = fwrite(str, size, nmemb, (FILE *)userp); capabilities_t *scanner = (capabilities_t *)userp;
size_t to_write = fwrite(str, size, nmemb, scanner->tmp);
scanner->real_read += to_write;
return (to_write); return (to_write);
} }
@ -68,6 +69,7 @@ escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *result)
if (device == NULL) if (device == NULL)
return (SANE_STATUS_NO_MEM); return (SANE_STATUS_NO_MEM);
scanner->real_read = 0;
curl_handle = curl_easy_init(); curl_handle = curl_easy_init();
if (curl_handle != NULL) { if (curl_handle != NULL) {
snprintf(scan_cmd, sizeof(scan_cmd), "%s%s%s", snprintf(scan_cmd, sizeof(scan_cmd), "%s%s%s",
@ -78,7 +80,7 @@ escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *result)
fclose(scanner->tmp); fclose(scanner->tmp);
scanner->tmp = tmpfile(); scanner->tmp = tmpfile();
if (scanner->tmp != NULL) { if (scanner->tmp != NULL) {
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, scanner->tmp); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, scanner);
CURLcode res = curl_easy_perform(curl_handle); CURLcode res = curl_easy_perform(curl_handle);
if (res != CURLE_OK) { if (res != CURLE_OK) {
DBG( 1, "Unable to scan: %s\n", curl_easy_strerror(res)); DBG( 1, "Unable to scan: %s\n", curl_easy_strerror(res));
@ -94,6 +96,12 @@ escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *result)
cleanup: cleanup:
curl_easy_cleanup(curl_handle); curl_easy_cleanup(curl_handle);
} }
DBG(10, "eSCL scan : %s\n", sane_strstatus(status)); DBG(10, "eSCL scan : [%s]\treal read (%ld)\n", sane_strstatus(status), scanner->real_read);
if (scanner->real_read == 0)
{
fclose(scanner->tmp);
scanner->tmp = NULL;
return SANE_STATUS_NO_DOCS;
}
return (status); return (status);
} }