aboutsummaryrefslogtreecommitdiffstats
path: root/devel/libusb
diff options
context:
space:
mode:
authorandreas <andreas@FreeBSD.org>2003-11-26 03:35:43 +0800
committerandreas <andreas@FreeBSD.org>2003-11-26 03:35:43 +0800
commit78fd2213c1b8d3ffd7fd6e35a4db753df7defecb (patch)
treef8d805372cc75ea2748a70cb3a922d29133a6125 /devel/libusb
parent8d02851893088fbd6325b8f856c6d36f021ad541 (diff)
downloadfreebsd-ports-gnome-78fd2213c1b8d3ffd7fd6e35a4db753df7defecb.tar.gz
freebsd-ports-gnome-78fd2213c1b8d3ffd7fd6e35a4db753df7defecb.tar.zst
freebsd-ports-gnome-78fd2213c1b8d3ffd7fd6e35a4db753df7defecb.zip
- fix for PR 58925
solves problem of hanging usb sessions with cams using gphoto2 ptp2 driver - bumped port revision - tested by different people under -current and -stable, no ill side effects and really cures the problem. The author of bsd.c clearly states out in the sources, that he has ported codee from linux 1:1 and he "kind of hopes" that it is ok. But it wasn't. This patch fixes hang that happens after the 1st read because the USB driver tries to read more bytes than are available. 0000 10 00 00 00 01 00 02 10-00 00 00 00 01 00 00 00 ................ 1.240828 gphoto2-port(2): Reading 512=0x200 bytes from port... gp_port_read: Operation timed out 9.267455 PTP2/library.c(2): PTP: gp_port_* function returned 0xffffffde -34 9.267819 context(0): PTP I/O error PR: 58925 Submitted by: Mariusz Woloszyn <emsi@ipartners.pl> Reviewed by: John Reynolds <johnjen@reynoldsnet.org> and some tester Approved by: portmgr@ (Joe Marcus Clarke <marcus@marcuscom.com>)
Diffstat (limited to 'devel/libusb')
-rw-r--r--devel/libusb/Makefile1
-rw-r--r--devel/libusb/files/patch-bsd.c62
2 files changed, 63 insertions, 0 deletions
diff --git a/devel/libusb/Makefile b/devel/libusb/Makefile
index eb38a81e66a0..3630bc2a620b 100644
--- a/devel/libusb/Makefile
+++ b/devel/libusb/Makefile
@@ -7,6 +7,7 @@
PORTNAME= libusb
PORTVERSION= 0.1.7
+PORTREVISION= 1
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= ${PORTNAME}
diff --git a/devel/libusb/files/patch-bsd.c b/devel/libusb/files/patch-bsd.c
new file mode 100644
index 000000000000..7f188bf7feb0
--- /dev/null
+++ b/devel/libusb/files/patch-bsd.c
@@ -0,0 +1,62 @@
+--- bsd.c.orig Mon Nov 11 19:04:16 2002
++++ bsd.c Sun Nov 23 15:51:49 2003
+@@ -276,7 +276,7 @@
+ int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,
+ int timeout)
+ {
+- int fd, ret, sent = 0;
++ int fd, ret;
+
+ /* Ensure the endpoint address is correct */
+ ep &= ~USB_ENDPOINT_IN;
+@@ -298,8 +298,7 @@
+ USB_ERROR_STR(ret, "error setting timeout: %s",
+ strerror(errno));
+
+- do {
+- ret = write(fd, bytes+sent, size-sent);
++ ret = write(fd, bytes, size);
+ if (ret < 0)
+ #if __FreeBSD__
+ USB_ERROR_STR(ret, "error writing to bulk endpoint %s.%d: %s",
+@@ -309,16 +308,13 @@
+ dev->device->filename, UE_GET_ADDR(ep), strerror(errno));
+ #endif
+
+- sent += ret;
+- } while(ret > 0 && sent < size);
+-
+- return sent;
++ return ret;
+ }
+
+ int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,
+ int timeout)
+ {
+- int fd, ret, retrieved = 0, one = 1;
++ int fd, ret, one = 1;
+
+ /* Ensure the endpoint address is correct */
+ ep |= USB_ENDPOINT_IN;
+@@ -345,8 +341,7 @@
+ USB_ERROR_STR(ret, "error setting short xfer: %s",
+ strerror(errno));
+
+- do {
+- ret = read(fd, bytes+retrieved, size-retrieved);
++ ret = read(fd, bytes, size);
+ if (ret < 0)
+ #if __FreeBSD__
+ USB_ERROR_STR(ret, "error reading from bulk endpoint %s.%d: %s",
+@@ -355,10 +350,8 @@
+ USB_ERROR_STR(ret, "error reading from bulk endpoint %s.%02d: %s",
+ dev->device->filename, UE_GET_ADDR(ep), strerror(errno));
+ #endif
+- retrieved += ret;
+- } while (ret > 0 && retrieved < size);
+
+- return retrieved;
++ return ret;
+ }
+
+ int usb_control_msg(usb_dev_handle *dev, int requesttype, int request,