Hi Julien,
The problem lies in libusb, it increased its block size from 4k to 16k
to improve performance of USB 2 in 0.1.10 and this broke libgphoto2[1],
so I got to learn about that stuff and tilted when Jerome told me
about his problem.
Also, I talked with Aurelien Jarno before I had a patch for libgphoto2
and he agreed to upload libusb 0.1.10 with 4k blocks to t-p-u, he did
it but I told release managers it was no longer necessary.
Well, please find the patch attached, it is based on the one used in
libgphoto2.
See you,
Frederic
[1] #301945 and #308290.
diff -Naur sane-backends-1.0.15-orig/debian/patches/00list
sane-backends-1.0.15-new/debian/patches/00list
--- sane-backends-1.0.15-orig/debian/patches/00list 2005-05-23
20:20:54.000000000 +0200
+++ sane-backends-1.0.15-new/debian/patches/00list 2005-05-23
20:20:36.000000000 +0200
@@ -17,3 +17,4 @@
36_sane-find-scanner_message
37_epson_usbids
38_artec_e+48_conf
+39_libusb_0.1.10a
diff -Naur sane-backends-1.0.15-orig/debian/patches/39_libusb_0.1.10a.dpatch
sane-backends-1.0.15-new/debian/patches/39_libusb_0.1.10a.dpatch
--- sane-backends-1.0.15-orig/debian/patches/39_libusb_0.1.10a.dpatch
1970-01-01 01:00:00.000000000 +0100
+++ sane-backends-1.0.15-new/debian/patches/39_libusb_0.1.10a.dpatch
2005-05-23 20:20:11.000000000 +0200
@@ -0,0 +1,82 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 39_libusb_0.1.10a.dpatch by <[EMAIL PROTECTED]>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
[EMAIL PROTECTED]@
+diff -urNad sane-backends-1.0.15/sanei/sanei_usb.c
/tmp/dpep.0SqSn1/sane-backends-1.0.15/sanei/sanei_usb.c
+--- sane-backends-1.0.15/sanei/sanei_usb.c 2004-10-03 16:18:17.000000000
+0200
++++ /tmp/dpep.0SqSn1/sane-backends-1.0.15/sanei/sanei_usb.c 2005-05-23
20:19:30.000000000 +0200
+@@ -822,9 +822,32 @@
+ #ifdef HAVE_LIBUSB
+ {
+ if (devices[dn].bulk_in_ep)
+- read_size = usb_bulk_read (devices[dn].libusb_handle,
+- devices[dn].bulk_in_ep, (char *) buffer,
+- (int) *size, libusb_timeout);
++ {
++ int nsize = *size, curread = 0, toread, result;
++ while (curread < nsize) {
++ toread = nsize - curread;
++ if (toread > 4096)
++ toread = 4096;
++ result = usb_bulk_read (devices[dn].libusb_handle,
++ devices[dn].bulk_in_ep, (char *) buffer +
curread,
++ toread, libusb_timeout);
++ if (result == 0) {
++ result = usb_bulk_read (devices[dn].libusb_handle,
++ devices[dn].bulk_in_ep, (char *) buffer +
curread,
++ toread, libusb_timeout);
++ if (result < 0) break;
++ }
++ if (result < 0) break;
++ curread += result;
++ if (result < toread)
++ break;
++ }
++ if (result > 0) {
++ read_size = curread;
++ } else {
++ read_size = -1;
++ }
++ }
+ else
+ {
+ DBG (1, "sanei_usb_read_bulk: can't read without a bulk-in "
+@@ -1036,9 +1059,32 @@
+ #ifdef HAVE_LIBUSB
+ {
+ if (devices[dn].int_in_ep)
+- read_size = usb_bulk_read (devices[dn].libusb_handle,
+- devices[dn].int_in_ep, (char *) buffer,
+- (int) *size, libusb_timeout);
++ {
++ int nsize = *size, curread = 0, toread, result;
++ while (curread < nsize) {
++ toread = nsize - curread;
++ if (toread > 4096)
++ toread = 4096;
++ result = usb_bulk_read (devices[dn].libusb_handle,
++ devices[dn].int_in_ep, (char *) buffer +
curread,
++ toread, libusb_timeout);
++ if (result == 0) {
++ result = usb_bulk_read (devices[dn].libusb_handle,
++ devices[dn].int_in_ep, (char *) buffer +
curread,
++ toread, libusb_timeout);
++ if (result < 0) break;
++ }
++ if (result < 0) break;
++ curread += result;
++ if (result < toread)
++ break;
++ }
++ if (result > 0) {
++ read_size = curread;
++ } else {
++ read_size = -1;
++ }
++ }
+ else
+ {
+ DBG (1, "sanei_usb_read_int: can't read without an int "