From 0abdfa483f54dc5ce876a870fc9335d6dc3e6bfe Mon Sep 17 00:00:00 2001 From: thierry1970 Date: Fri, 15 May 2020 10:21:56 +0200 Subject: [PATCH] If no data then the status is NO-DOCS. --- backend/escl/escl.h | 1 + backend/escl/escl_scan.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/backend/escl/escl.h b/backend/escl/escl.h index 67a466c12..53ce7c725 100644 --- a/backend/escl/escl.h +++ b/backend/escl/escl.h @@ -139,6 +139,7 @@ typedef struct capabilities unsigned char *img_data; long img_size; long img_read; + size_t real_read; SANE_Bool work; } capabilities_t; diff --git a/backend/escl/escl_scan.c b/backend/escl/escl_scan.c index 9a8c24029..9fce801f6 100644 --- a/backend/escl/escl_scan.c +++ b/backend/escl/escl_scan.c @@ -43,8 +43,9 @@ static size_t 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); } @@ -68,6 +69,7 @@ escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *result) if (device == NULL) return (SANE_STATUS_NO_MEM); + scanner->real_read = 0; curl_handle = curl_easy_init(); if (curl_handle != NULL) { 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); scanner->tmp = tmpfile(); 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); if (res != CURLE_OK) { 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: 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); }