In comedi_do_insn:
authorIan Abbott <abbotti@mev.co.uk>
Mon, 14 Jan 2008 18:05:35 +0000 (18:05 +0000)
committerIan Abbott <abbotti@mev.co.uk>
Mon, 14 Jan 2008 18:05:35 +0000 (18:05 +0000)
For INSN_WAIT, make sure insn->n is exactly 1.
For subdevice instructions, if subdevice is unused, return -EIO.
For subdevice instructions, if chanspec is wrong, return -EINVAL.

comedi/kcomedilib/kcomedilib_main.c

index 815fd23d49d9603988ce4a9cf600312fd6a70bb4..bcb14f4dd7a1c524afbe47adb3c3a8fa2a7bb4f9 100644 (file)
@@ -196,7 +196,7 @@ int comedi_do_insn(comedi_t * d, comedi_insn * insn)
                        }
                case INSN_WAIT:
                        /* XXX isn't the value supposed to be nanosecs? */
-                       if (insn->n < 1 || insn->data[0] >= 100) {
+                       if (insn->n != 1 || insn->data[0] >= 100) {
                                ret = -EINVAL;
                                break;
                        }
@@ -242,7 +242,7 @@ int comedi_do_insn(comedi_t * d, comedi_insn * insn)
 
                if (s->type == COMEDI_SUBD_UNUSED) {
                        rt_printk("%d not useable subdevice\n", insn->subdev);
-                       /* XXX no return value is set! ret = ? */
+                       ret = -EIO;
                        goto error;
                }
 
@@ -250,7 +250,7 @@ int comedi_do_insn(comedi_t * d, comedi_insn * insn)
 
                if ((ret = check_chanlist(s, 1, &insn->chanspec)) < 0) {
                        rt_printk("bad chanspec\n");
-                       /* XXX no return value is set! ret = ? */
+                       ret = -EINVAL;
                        goto error;
                }