/* Write function is similar for the four protocols used
with only a minor change for usa90 (usa19hs) required */
-static int keyspan_write(struct usb_serial_port *port,
+static int keyspan_write(struct usb_serial_port *port, int from_user,
const unsigned char *buf, int count)
{
struct keyspan_port_private *p_priv;
for now so set to zero */
((char *)this_urb->transfer_buffer)[0] = 0;
- memcpy (this_urb->transfer_buffer + dataOffset, buf, todo);
+ if (from_user) {
+ if (copy_from_user(this_urb->transfer_buffer + dataOffset, buf, todo))
+ return -EFAULT;
+ } else {
+ memcpy (this_urb->transfer_buffer + dataOffset, buf, todo);
+ }
buf += todo;
/* send the data out the bulk port */
{
if (urb && urb->status == -EINPROGRESS) {
urb->transfer_flags &= ~URB_ASYNC_UNLINK;
- usb_kill_urb(urb);
+ usb_unlink_urb(urb);
}
}