]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change read with memcpy
authorBastian Dehn <hhaalo@arcor.de>
Thu, 8 Feb 2024 21:22:49 +0000 (22:22 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Thu, 8 Feb 2024 21:22:49 +0000 (22:22 +0100)
src/kds_s2000w_net.c

index dfc7ee980a8b0354f41550f1c9375d1ca5996317..0a95758b2e76b29ec60d6f8723835b272c78f2a1 100644 (file)
@@ -230,27 +230,27 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data,
                return SANE_STATUS_EOF;
        }
 
-       int length_count = 0;
-       while(length_count < max_length) {
-               if (cancel) {
-                       scan_started = 0;
-                       *length = 0;
-                       kds_s2000w_handler_stop_scan();
-                       sleep(1);
-                       kds_s2000w_handler_close();
-                       sleep(1);
-                       kds_s2000w_handler_open();
-                       return SANE_STATUS_CANCELLED;
-               }
-
-               if (read_size >= current_metadata.size)
-                       break;
+       if (cancel) {
+               scan_started = 0;
+               *length = 0;
+               kds_s2000w_handler_stop_scan();
+               sleep(1);
+               kds_s2000w_handler_close();
+               sleep(1);
+               kds_s2000w_handler_open();
+               return SANE_STATUS_CANCELLED;
+       }
 
-               data[length_count] = image_data[read_size];
-               length_count++;
-               read_size++;
+       if (read_size <= current_metadata.size - max_length) {
+               *length = max_length;
+               memcpy(data, current_metadata.image + read_size, *length);
+       } else {
+               *length = current_metadata.size - read_size;
+               memcpy(data, current_metadata.image + read_size, *length);
        }
-       *length = length_count;
+
+       read_size += *length;
+
        printf("length: %i\n", *length);
        printf("read size: %i\n", read_size);