if (fd > 0) {
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
+ free(str);
return -1;
}
chan->enabled = (int) strtol(readbuf, NULL, 10);
break;
}
chan_num = ((int) strtol(readbuf, NULL, 10));
- chan = &dev->channels[chan_num];
- chan->index = chan_num;
- close(fd);
+ if (chan_num >= 0 && chan_num < dev->chan_num) {
+ chan = &dev->channels[chan_num];
+ chan->index = chan_num;
+ close(fd);
- buf[(strlen(buf) - 5)] = '\0';
- char* str = strdup(buf);
- // grab the enable flag of channel
- snprintf(buf, MAX_SIZE, "%sen", str);
- fd = open(buf, O_RDONLY);
- if (fd > 0) {
- if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
- syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
- return -1;
+ buf[(strlen(buf) - 5)] = '\0';
+ char* str = strdup(buf);
+ // grab the enable flag of channel
+ snprintf(buf, MAX_SIZE, "%sen", str);
+ fd = open(buf, O_RDONLY);
+ if (fd > 0) {
+ if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
+ syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
+ free(str);
+ return -1;
+ }
+ chan->enabled = (int) strtol(readbuf, NULL, 10);
+ // only calculate enable buffer size for trigger buffer extract data
+ if (chan->enabled) {
+ dev->datasize += chan->bytes;
+ }
+ close(fd);
}
- chan->enabled = (int) strtol(readbuf, NULL, 10);
- // only calculate enable buffer size for trigger buffer extract data
- if (chan->enabled) {
- dev->datasize += chan->bytes;
- }
- close(fd);
+ // clean up str var
+ free(str);
}
- // clean up str var
- free(str);
}
}
}