Applied with minor differences, revision 1051.
Please test it out.
On 5/20/08, David Imhoff <[EMAIL PROTECTED]> wrote:
> Op Vr, 16 mei, 2008 23:37, schreef Alon Bar-Lev:
>
> > I guess this for OpenCT, right?
> > Can you please send all the needed patches to make it work?
> > Also, please don't use asprintf, as it is gnu specific and is not used
> > in other parts of the sources.
>
>
> Thank you for your reply. The patch is indeed for OpenCT.
>
> I merged both patches and replaced the asprintf() with a snprintf().
> I also fixed the evil sprintf() at line 66. I tested it with
> OpenBSD 4.3 and FreeBSD 7.0 and a OmniKey CardMan 3121 CCID device.
>
> Best regards,
>
> David
>
> diff -urN ../openct-0.6.14.orig/src/ifd/sys-bsd.c ./src/ifd/sys-bsd.c
> --- ../openct-0.6.14.orig/src/ifd/sys-bsd.c 2008-05-19
> 14:42:57.000000000 +0000
> +++ ./src/ifd/sys-bsd.c 2008-05-19 16:05:47.000000000 +0000
> @@ -13,7 +13,11 @@
> #include "internal.h"
> #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) ||
> defined(__FreeBSD_kernel__) || defined(__DragonFly__)
> #include <sys/types.h>
> +#if defined(__DragonFly__)
> +#include <bus/usb/usb.h>
> +#else
> #include <dev/usb/usb.h>
> +#endif
> #include <sys/stat.h>
> #include <sys/ioctl.h>
> #include <sys/poll.h>
> @@ -63,7 +67,11 @@
> return 0;
> }
>
> - sprintf((char *)&filename, "%s.%d", name, endpoint);
> +#ifdef __OpenBSD__
> + snprintf(filename, sizeof(filename), "%s.%.2d", name, endpoint);
> +#else
> + snprintf(filename, sizeof(filename), "%s.%d", name, endpoint);
>
> +#endif /* __OpenBSD__ */
>
> if ((interfaces[interface][endpoint].ep_fd = open(filename, flags)) <
> 0) {
> ifd_debug(6, "open_ep: error opening \"%s\": %s", filename,
>
> @@ -91,14 +99,22 @@
> int direction =
> (ep & IFD_USB_ENDPOINT_DIR_MASK) == IFD_USB_ENDPOINT_IN ? 1 : 0;
> int endpoint = (ep & ~IFD_USB_ENDPOINT_DIR_MASK);
> + int one = 1;
>
> ct_debug("ifd_sysdep_usb_bulk: endpoint=%d direction=%d", endpoint,
> direction);
> - if (open_ep(dev->name, 0, endpoint, O_RDWR | O_NONBLOCK)) {
> - ct_debug("ifd_sysdep_usb_bulk: opening endpoint failed");
> - return -1;
> - }
> if (direction) {
> + if (open_ep(dev->name, 0, endpoint, O_RDONLY | O_NONBLOCK)) {
> + ct_debug("ifd_sysdep_usb_bulk: opening endpoint
> failed");
> + return -1;
> + }
> +
> + if (ioctl(interfaces[0][endpoint].ep_fd, USB_SET_SHORT_XFER,
> + &one) < 0) {
> + ifd_debug(6, "ifd_sysdep_usb_bulk:
> USB_SET_SHORT_XFER"
> + " failed: %s", strerror(errno));
> + ct_error("usb_bulk read failed: %s",
> strerror(errno));
> + }
> if ((bytes_to_process =
> read(interfaces[0][endpoint].ep_fd, buffer, len)) < 0) {
> ifd_debug(6, "ifd_sysdep_usb_bulk: read failed: %s",
> @@ -110,6 +126,11 @@
> bytes_to_process);
> return bytes_to_process;
> } else {
> + if (open_ep(dev->name, 0, endpoint, O_WRONLY | O_NONBLOCK)) {
> + ct_debug("ifd_sysdep_usb_bulk: opening endpoint
> failed");
> + return -1;
> + }
> +
> bytes_to_process = len;
> if ((bytes_processed =
> write(interfaces[0][endpoint].ep_fd, buffer,
> @@ -314,7 +335,15 @@
>
>
> int ifd_sysdep_usb_open(const char *device)
> {
> +#ifdef __OpenBSD__
>
> + char path[256];
> +
> + if (snprintf(&path, sizeof(path), "%s.00", device) < 0)
> + return -1;
> + return open(path, O_RDWR);
>
> +#else
> return open(device, O_RDWR);
> +#endif /* __OpenBSD__ */
> }
>
> int ifd_sysdep_usb_reset(ifd_device_t * dev)
>
> @@ -384,13 +413,8 @@
>
>
> if (!(driver = ifd_driver_for_id(&id)))
> continue;
> -#ifdef __OpenBSD__
> - snprintf(typedev, sizeof(typedev),
> - "usb:/dev/%s.00",
> device_info.udi_devnames[0]);
> -#else
> snprintf(typedev, sizeof(typedev),
> "usb:/dev/%s", device_info.udi_devnames[0]);
> -#endif /* __OpenBSD__ */
>
> ifd_spawn_handler(driver, typedev, -1);
> }
>
>
>
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel