summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2008-06-25 03:25:45 +0000
committerRobin H. Johnson <robbat2@gentoo.org>2008-06-25 03:25:45 +0000
commit71f90e466f810ff96c48c499abe04fe3533567b1 (patch)
tree2fb80ccd676f01a7bc9fa71d02ea380253fa23f4
parentVersion bump per bug #226155. (diff)
downloadgentoo-2-71f90e466f810ff96c48c499abe04fe3533567b1.tar.gz
gentoo-2-71f90e466f810ff96c48c499abe04fe3533567b1.tar.bz2
gentoo-2-71f90e466f810ff96c48c499abe04fe3533567b1.zip
Bug #225879, fix infinite looping during usb_bulk operations.
(Portage version: 2.2_rc1/cvs/Linux 2.6.26-rc4-00103-g1beee8d x86_64)
-rw-r--r--dev-libs/libusb/ChangeLog8
-rw-r--r--dev-libs/libusb/files/libusb-0.1.12-no-infinite-bulk.patch24
-rw-r--r--dev-libs/libusb/libusb-0.1.12-r4.ebuild69
3 files changed, 100 insertions, 1 deletions
diff --git a/dev-libs/libusb/ChangeLog b/dev-libs/libusb/ChangeLog
index 02611dc151f4..9c615f94a58a 100644
--- a/dev-libs/libusb/ChangeLog
+++ b/dev-libs/libusb/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for dev-libs/libusb
# Copyright 1999-2008 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-libs/libusb/ChangeLog,v 1.80 2008/06/07 00:59:04 robbat2 Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-libs/libusb/ChangeLog,v 1.81 2008/06/25 03:25:44 robbat2 Exp $
+
+*libusb-0.1.12-r4 (25 Jun 2008)
+
+ 25 Jun 2008; Robin H. Johnson <robbat2@gentoo.org>
+ +files/libusb-0.1.12-no-infinite-bulk.patch, +libusb-0.1.12-r4.ebuild:
+ Bug #225879, fix infinite looping during usb_bulk operations.
*libusb-0.1.12-r3 (07 Jun 2008)
diff --git a/dev-libs/libusb/files/libusb-0.1.12-no-infinite-bulk.patch b/dev-libs/libusb/files/libusb-0.1.12-no-infinite-bulk.patch
new file mode 100644
index 000000000000..563397d2fea3
--- /dev/null
+++ b/dev-libs/libusb/files/libusb-0.1.12-no-infinite-bulk.patch
@@ -0,0 +1,24 @@
+Patch-from: http://bugs.gentoo.org/show_bug.cgi?id=225879
+Gentoo-Bug: 225879
+Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
+
+Prevents an infinite loop if device is removed during usb_bulk_read or
+usb_bulk_write.
+
+diff -Naur libusb-0.1.12/linux.c libusb-0.1.12-new/linux.c
+--- libusb-0.1.12/linux.c 2006-03-04 04:52:46.000000000 +0200
++++ libusb-0.1.12-new/linux.c 2008-06-11 14:22:20.000000000 +0300
+@@ -220,6 +220,13 @@
+ waiting = 1;
+ context = NULL;
+ while (!urb.usercontext && ((ret = ioctl(dev->fd, IOCTL_USB_REAPURBNDELAY, &context)) == -1) && waiting) {
++ if (ret == -1)
++ {
++ if (errno == ENODEV)
++ {
++ return -ENODEV;
++ }
++ }
+ tv.tv_sec = 0;
+ tv.tv_usec = 1000; // 1 msec
+ select(dev->fd + 1, NULL, &writefds, NULL, &tv); //sub second wait
diff --git a/dev-libs/libusb/libusb-0.1.12-r4.ebuild b/dev-libs/libusb/libusb-0.1.12-r4.ebuild
new file mode 100644
index 000000000000..e48b88a2f102
--- /dev/null
+++ b/dev-libs/libusb/libusb-0.1.12-r4.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-libs/libusb/libusb-0.1.12-r4.ebuild,v 1.1 2008/06/25 03:25:44 robbat2 Exp $
+
+WANT_AUTOMAKE="latest"
+WANT_AUTOCONF="latest"
+inherit eutils libtool autotools toolchain-funcs
+
+DESCRIPTION="Userspace access to USB devices"
+HOMEPAGE="http://libusb.sourceforge.net/"
+SRC_URI="mirror://sourceforge/libusb/${P}.tar.gz"
+
+LICENSE="LGPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd"
+IUSE="debug doc nocxx"
+RESTRICT="test"
+
+RDEPEND=""
+DEPEND="doc? ( app-text/openjade
+ app-text/docbook-dsssl-stylesheets
+ app-text/docbook-sgml-utils
+ ~app-text/docbook-sgml-dtd-4.2 )"
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+ sed -i -e 's:-Werror::' Makefile.am
+ sed -i 's:AC_LANG_CPLUSPLUS:AC_PROG_CXX:' configure.in #213800
+ epatch "${FILESDIR}"/${PV}-fbsd.patch
+ use nocxx && epatch "${FILESDIR}"/${PN}-0.1.12-nocpp.patch
+ epatch "${FILESDIR}"/${PN}-0.1.12-no-infinite-bulk.patch
+ eautoreconf
+ elibtoolize
+
+ # Ensure that the documentation actually finds the DTD it needs
+ docbookdtd="/usr/share/sgml/docbook/sgml-dtd-4.2/docbook.dtd"
+ sysid='"-//OASIS//DTD DocBook V4.2//EN"'
+ sed -r -i -e \
+ "s,(${sysid}) \[\$,\1 \"${docbookdtd}\" \[,g" \
+ "${S}"/doc/manual.sgml
+}
+
+src_compile() {
+ econf \
+ $(use_enable debug debug all) \
+ $(use_enable doc build-docs) \
+ --libdir /usr/$(get_libdir) \
+ || die "econf failed"
+ emake || die "emake failed"
+}
+
+src_install() {
+ emake -j1 DESTDIR="${D}" install || die "make install failed"
+
+ dodir /$(get_libdir)
+ mv "${D}"/usr/$(get_libdir)/*.so* "${D}"/$(get_libdir) \
+ || die "Failed to put dynamic libs in /$(get_libdir)"
+
+ use nocxx && rm -f "${D}"/usr/include/usbpp.h
+
+ gen_usr_ldscript libusb.so
+ use nocxx || gen_usr_ldscript libusbpp.so
+
+ dodoc AUTHORS NEWS README || die "dodoc failed"
+ if use doc ; then
+ dohtml doc/html/*.html || die "dohtml failed"
+ fi
+}