*** libusb-0.1.7/bsd.c Mon Nov 11 12:04:16 2002 --- libusb-0.1.7-dmd/bsd.c Fri Dec 26 13:49:51 2003 *************** *** 347,353 **** do { ret = read(fd, bytes+retrieved, size-retrieved); ! if (ret < 0) #if __FreeBSD__ USB_ERROR_STR(ret, "error reading from bulk endpoint %s.%d: %s", dev->device->filename, UE_GET_ADDR(ep), strerror(errno)); --- 347,353 ---- do { ret = read(fd, bytes+retrieved, size-retrieved); ! if (ret < 0) { #if __FreeBSD__ USB_ERROR_STR(ret, "error reading from bulk endpoint %s.%d: %s", dev->device->filename, UE_GET_ADDR(ep), strerror(errno)); *************** *** 355,361 **** 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; --- 355,364 ---- USB_ERROR_STR(ret, "error reading from bulk endpoint %s.%02d: %s", dev->device->filename, UE_GET_ADDR(ep), strerror(errno)); #endif ! } ! else { ! retrieved += ret; ! } } while (ret > 0 && retrieved < size); return retrieved; *************** *** 536,544 **** int usb_clear_halt(usb_dev_handle *dev, unsigned int ep) { ! /* Not yet done, because I haven't needed it. */ ! USB_ERROR_STR(-ENOSYS, "usb_clear_halt called, unimplemented on BSD"); } int usb_reset(usb_dev_handle *dev) --- 539,565 ---- int usb_clear_halt(usb_dev_handle *dev, unsigned int ep) { ! int fd, ret, dummy; ! /* Ensure the endpoint address is correct */ ! ep &= ~USB_ENDPOINT_IN; ! ! fd = ensure_ep_open(dev, ep, O_WRONLY); ! if (fd < 0) { ! if (usb_debug >= 2) { ! #if __FreeBSD__ ! fprintf (stderr, "usb_clear_halt: got negative open file descriptor for endpoint %d\n", UE_GET_ADDR(ep)); ! #else ! fprintf (stderr, "usb_clear_halt: got negative open file descriptor for endpoint %02d\n", UE_GET_ADDR(ep)); ! #endif ! } ! return fd; ! } ! dummy = 0; ! #define USB_CLEAR_ENDPOINT_STALL _IOW ('U', 115, int) ! ret = ioctl(fd, USB_CLEAR_ENDPOINT_STALL, &dummy); ! ret |= read(fd, &dummy, 1); ! return ret; } int usb_reset(usb_dev_handle *dev)