static int proc_getdriver ( struct usb_dev_state * ps , void __user * arg ) {
 struct usbdevfs_getdriver gd ;
 struct usb_interface * intf ;
 int ret ;
 if ( copy_from_user ( & gd , arg , sizeof ( gd ) ) ) return - EFAULT ;
 intf = usb_ifnum_to_if ( ps -> dev , gd . interface ) ;
 if ( ! intf || ! intf -> dev . driver ) ret = - ENODATA ;
 else {
 strlcpy ( gd . driver , intf -> dev . driver -> name , sizeof ( gd . driver ) ) ;
 ret = ( copy_to_user ( arg , & gd , sizeof ( gd ) ) ? - EFAULT : 0 ) ;
 }
 return ret ;
 }
static int proc_getdriver ( struct usb_dev_state * ps , void __user * arg ) {
 struct usbdevfs_getdriver gd ;
 struct usb_interface * intf ;
 int ret ;
 if ( copy_from_user ( & gd , arg , sizeof ( gd ) ) ) return - EFAULT ;
 intf = usb_ifnum_to_if ( ps -> dev , gd . interface ) ;
 if ( ! intf || ! intf -> dev . driver ) ret = - ENODATA ;
 else {
 strlcpy ( gd . driver , intf -> dev . driver -> name , sizeof ( gd . driver ) ) ;
 ret = ( copy_to_user ( arg , & gd , sizeof ( gd ) ) ? - EFAULT : 0 ) ;
 }
 return ret ;
 }