Added some device and subdevice validity checks.
authorIan Abbott <abbotti@mev.co.uk>
Wed, 5 Nov 2008 12:52:25 +0000 (12:52 +0000)
committerIan Abbott <abbotti@mev.co.uk>
Wed, 5 Nov 2008 12:52:25 +0000 (12:52 +0000)
lib/buffer.c
lib/calib.c
lib/comedi.c
lib/get.c
lib/range.c
lib/sv.c
lib/timer.c

index 8210067276271ff333f2221d3241bd02fb559c29..dd286aa2e9171b50cbeddd7616efff76732e7453 100644 (file)
@@ -30,6 +30,7 @@ int _comedi_set_buffer_size(comedi_t *it, unsigned int subdev, unsigned int size
        int ret;
        comedi_bufconfig bc;
 
+       if(!valid_subd(it,subdev)) return -1;
        memset(&bc, 0, sizeof(bc));
        bc.subdevice = subdev;
        bc.size = size;
@@ -45,6 +46,7 @@ int _comedi_set_max_buffer_size(comedi_t *it, unsigned int subdev, unsigned int
        int ret;
        comedi_bufconfig bc;
 
+       if(!valid_subd(it,subdev)) return -1;
        memset(&bc, 0, sizeof(bc));
        bc.subdevice = subdev;
        bc.maximum_size = max_size;
@@ -72,6 +74,7 @@ int _comedi_get_buffer_contents(comedi_t *it, unsigned int subdev)
        int ret;
        comedi_bufinfo bi;
 
+       if(!valid_subd(it,subdev)) return -1;
        memset(&bi, 0, sizeof(bi));
        bi.subdevice = subdev;
        ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi);
@@ -89,6 +92,7 @@ int _comedi_mark_buffer_read(comedi_t *it, unsigned int subdev, unsigned int byt
        int ret;
        comedi_bufinfo bi;
 
+       if(!valid_subd(it,subdev)) return -1;
        memset(&bi, 0, sizeof(bi));
        bi.subdevice = subdev;
        bi.bytes_read = bytes;
@@ -107,6 +111,7 @@ int _comedi_mark_buffer_written(comedi_t *it, unsigned int subdev, unsigned int
        int ret;
        comedi_bufinfo bi;
 
+       if(!valid_subd(it,subdev)) return -1;
        memset(&bi, 0, sizeof(bi));
        bi.subdevice = subdev;
        bi.bytes_written = bytes;
@@ -125,6 +130,7 @@ int _comedi_get_buffer_offset(comedi_t *it, unsigned int subdev)
        int ret;
        comedi_bufinfo bi;
 
+       if(!valid_subd(it,subdev)) return -1;
        memset(&bi, 0, sizeof(bi));
        bi.subdevice = subdev;
        ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi);
@@ -138,6 +144,7 @@ int _comedi_get_front_count(comedi_t *it, unsigned int subdev)
        int ret;
        comedi_bufinfo bi;
 
+       if(!valid_subd(it,subdev)) return -1;
        memset(&bi, 0, sizeof(bi));
        bi.subdevice = subdev;
        ret = comedi_ioctl(it->fd, COMEDI_BUFINFO, &bi);
index 0038c8269bebfe088b9b958f8c9fe7c1b9b9f3f1..941557049d7d9d15256233929c61b71699e9e988 100644 (file)
@@ -156,6 +156,7 @@ int _comedi_apply_parsed_calibration( comedi_t *dev, unsigned int subdev, unsign
 {
        int retval;
 
+       if(!valid_dev(dev)) return -1;
        retval = check_cal_file( dev, calibration );
        if( retval < 0 ) return retval;
 
@@ -185,6 +186,7 @@ char* _comedi_get_default_calibration_path( comedi_t *dev )
        char *board_name;
        const char *driver_name;
 
+       if(!valid_dev(dev)) return NULL;
        if( fstat( comedi_fileno( dev ), &file_stats ) < 0 )
        {
                COMEDILIB_DEBUG( 3, "failed to get file stats of comedi device file\n" );
index 3a152c104020b05b3d44e12693307877fe64efe2..5877e6a2548391215c0a8008f1b34c511fabd82a 100644 (file)
@@ -89,6 +89,8 @@ int _comedi_close(comedi_t *it)
        subdevice *s;
        int i,j;
 
+       if(!valid_dev(it))
+               return -1;
        it->magic=0;
 
        for(i=0;i<it->n_subdevices;i++){
@@ -124,28 +126,28 @@ int _comedi_close(comedi_t *it)
 EXPORT_ALIAS_DEFAULT(_comedi_cancel,comedi_cancel,0.7.18);
 int _comedi_cancel(comedi_t *it,unsigned int subdevice)
 {
+       if(!valid_dev(it)) return -1;
        return comedi_ioctl(it->fd, COMEDI_CANCEL, (void*)(unsigned long)subdevice);
 }
 
 EXPORT_ALIAS_DEFAULT(_comedi_poll,comedi_poll,0.7.18);
 int _comedi_poll(comedi_t *it,unsigned int subdevice)
 {
+       if(!valid_dev(it)) return -1;
        return comedi_ioctl(it->fd, COMEDI_POLL, (void*)(unsigned long)subdevice);
 }
 
 EXPORT_ALIAS_DEFAULT(_comedi_fileno,comedi_fileno,0.7.18);
 int _comedi_fileno(comedi_t *it)
 {
-       if(!it)
-               return -1;
-
+       if(!valid_dev(it)) return -1;
        return it->fd;
 }
 
 EXPORT_ALIAS_DEFAULT(_comedi_trigger,comedi_trigger,0.7.18);
 int _comedi_trigger(comedi_t *it,comedi_trig *t)
 {
-       if(!it || !t)
+       if(!valid_dev(it) || !t)
                return -1;
 
        return comedi_ioctl(it->fd, COMEDI_TRIG, t);
@@ -155,6 +157,7 @@ EXPORT_ALIAS_DEFAULT(_comedi_command,comedi_command,0.7.18);
 int _comedi_command(comedi_t *it,comedi_cmd *t)
 {
        int ret;
+       if(!valid_dev(it)) return -1;
        ret = comedi_ioctl(it->fd, COMEDI_CMD, t);
        __comedi_errno = errno;
        switch(__comedi_errno){
@@ -169,6 +172,7 @@ EXPORT_ALIAS_DEFAULT(_comedi_command_test,comedi_command_test,0.7.18);
 int _comedi_command_test(comedi_t *it,comedi_cmd *t)
 {
        int ret;
+       if(!valid_dev(it)) return -1;
        ret = comedi_ioctl(it->fd, COMEDI_CMDTEST, t);
        __comedi_errno = errno;
        switch(__comedi_errno){
@@ -183,6 +187,7 @@ EXPORT_ALIAS_DEFAULT(_comedi_do_insnlist,comedi_do_insnlist,0.7.18);
 int _comedi_do_insnlist(comedi_t *it,comedi_insnlist *il)
 {
        int ret;
+       if(!valid_dev(it)) return -1;
        ret = comedi_ioctl(it->fd, COMEDI_INSNLIST, il);
        __comedi_errno = errno;
        return ret;
@@ -191,6 +196,7 @@ int _comedi_do_insnlist(comedi_t *it,comedi_insnlist *il)
 EXPORT_ALIAS_DEFAULT(_comedi_do_insn,comedi_do_insn,0.7.18);
 int _comedi_do_insn(comedi_t *it,comedi_insn *insn)
 {
+       if(!valid_dev(it)) return -1;
        if(it->has_insn_ioctl){
                return comedi_ioctl(it->fd, COMEDI_INSN, insn);
        }else{
@@ -210,12 +216,14 @@ int _comedi_do_insn(comedi_t *it,comedi_insn *insn)
 EXPORT_ALIAS_DEFAULT(_comedi_lock,comedi_lock,0.7.18);
 int _comedi_lock(comedi_t *it,unsigned int subdevice)
 {
+       if(!valid_dev(it)) return -1;
        return comedi_ioctl(it->fd, COMEDI_LOCK, (void*)(unsigned long)subdevice);
 }
 
 EXPORT_ALIAS_DEFAULT(_comedi_unlock,comedi_unlock,0.7.18);
 int _comedi_unlock(comedi_t *it,unsigned int subdevice)
 {
+       if(!valid_dev(it)) return -1;
        return comedi_ioctl(it->fd, COMEDI_UNLOCK, (void*)(unsigned long)subdevice);
 }
 
index 02f0e7f4d93e113a6473110ebe6d075cc6d352fa..0856d9910a7b698b80ca4b8ae990d2007a079fa0 100644 (file)
--- a/lib/get.c
+++ b/lib/get.c
@@ -74,7 +74,7 @@ const char* _comedi_get_board_name(comedi_t *it)
 EXPORT_ALIAS_VER(_comedi_get_subdevice_flags_old, comedi_get_subdevice_flags,0.7.18);
 int _comedi_get_subdevice_flags_old(comedi_t *it,unsigned int subd)
 {
-       if(!valid_dev(it))
+       if(!valid_subd(it,subd))
                return 0;
        return it->subdevices[subd].subd_flags;
 }
@@ -85,7 +85,7 @@ int _comedi_get_subdevice_flags(comedi_t *it,unsigned int subd)
        comedi_subdinfo *s;
        int flags;
        int ret;
-       if(!valid_dev(it))
+       if(!valid_subd(it,subd))
                return -1;
        s = calloc(it->n_subdevices, sizeof(comedi_subdinfo));
        if(s == NULL)
@@ -107,7 +107,7 @@ int _comedi_get_subdevice_flags(comedi_t *it,unsigned int subd)
 EXPORT_ALIAS_DEFAULT(_comedi_get_subdevice_type,comedi_get_subdevice_type,0.7.18);
 int _comedi_get_subdevice_type(comedi_t *it,unsigned int subd)
 {
-       if(!valid_dev(it))
+       if(!valid_subd(it,subd))
                return -1;
 
        return it->subdevices[subd].type;
@@ -171,6 +171,8 @@ lsampl_t _comedi_get_maxdata(comedi_t *it,unsigned int subdevice,unsigned int ch
 EXPORT_ALIAS_DEFAULT(_comedi_maxdata_is_chan_specific,comedi_maxdata_is_chan_specific,0.7.18);
 int _comedi_maxdata_is_chan_specific(comedi_t *it,unsigned int subdevice)
 {
+       if(!valid_subd(it,subdevice))
+               return -1;
        if(it->subdevices[subdevice].maxdata_list)
                return 1;
        return 0;
index cc6115d3d8304da8506f1818722a802761557ea9..361ac6802555cddb3dd14ebc5f73e6f88a9fffca 100644 (file)
@@ -136,6 +136,7 @@ int _comedi_get_n_ranges(comedi_t *it,unsigned int subd,unsigned int chan)
 EXPORT_ALIAS_DEFAULT(_comedi_range_is_chan_specific,comedi_range_is_chan_specific,0.7.18);
 int _comedi_range_is_chan_specific(comedi_t *it,unsigned int subd)
 {
+       if(!valid_subd(it,subd)) return -1;
        return (it->subdevices[subd].subd_flags&SDF_RANGETYPE)?1:0;
 }
 
index 821a25616c09ac5b8308cbc6984c92f0f311070a..bb96c46f40a781e8c58ed3c371e6989709444fbd 100644 (file)
--- a/lib/sv.c
+++ b/lib/sv.c
@@ -72,6 +72,8 @@ int _comedi_sv_update(comedi_sv_t *it)
 EXPORT_ALIAS_DEFAULT(_comedi_sv_measure,comedi_sv_measure,0.7.18);
 int _comedi_sv_measure(comedi_sv_t *it,double *data)
 {
+       if(!it)return -1;
+       if(!valid_subd(it->dev,it->subdevice))return -1;
        if(it->dev->subdevices[it->subdevice].subd_flags & SDF_LSAMPL){
                return sv_measure_l(it,data);
        }else{
index a12ee8db0455ded71b067140019cdd3a25785f79..220974b5a047eb2add2f233ff28a278c18e7ac21 100644 (file)
@@ -147,7 +147,7 @@ int _comedi_get_timer(comedi_t *it,unsigned int subdev,double freq,
 {
        int timer_type;
        
-       if(!it || !trigvar || !actual_freq)
+       if(!valid_subd(it,subdev) || !trigvar || !actual_freq)
                return -1;
 
        timer_type=it->subdevices[subdev].timer_type;