/* Handle 32-bit COMEDI_CMD ioctl. */ static int compat_cmd(struct file *file, unsigned long arg) { struct comedi_cmd __user *cmd; struct comedi32_cmd_struct __user *cmd32; int rc; cmd32 = compat_ptr(arg); cmd = compat_alloc_user_space(sizeof(*cmd)); rc = get_compat_cmd(cmd, cmd32); if (rc) return rc; return translated_ioctl(file, COMEDI_CMD, (unsigned long)cmd); }
/* Handle 32-bit COMEDI_CMDTEST ioctl. */ static int compat_cmdtest(struct file *file, unsigned long arg) { struct comedi_cmd __user *cmd; struct comedi32_cmd_struct __user *cmd32; int rc, err; cmd32 = compat_ptr(arg); cmd = compat_alloc_user_space(sizeof(*cmd)); rc = get_compat_cmd(cmd, cmd32); if (rc) return rc; rc = translated_ioctl(file, COMEDI_CMDTEST, (unsigned long)cmd); if (rc < 0) return rc; err = put_compat_cmd(cmd32, cmd); if (err) rc = err; return rc; }
/* Handle 32-bit COMEDI_CMD ioctl. */ static int compat_cmd(struct file *file, unsigned long arg) { struct comedi_cmd __user *cmd; struct comedi32_cmd_struct __user *cmd32; int rc, err; cmd32 = compat_ptr(arg); cmd = compat_alloc_user_space(sizeof(*cmd)); rc = get_compat_cmd(cmd, cmd32); if (rc) return rc; rc = translated_ioctl(file, COMEDI_CMD, (unsigned long)cmd); if (rc == -EAGAIN) { /* Special case: copy cmd back to user. */ err = put_compat_cmd(cmd32, cmd); if (err) rc = err; } return rc; }