diff options
Diffstat (limited to 'drivers/staging/iio/Documentation')
-rw-r--r-- | drivers/staging/iio/Documentation/generic_buffer.c | 4 | ||||
-rw-r--r-- | drivers/staging/iio/Documentation/iio_utils.h | 7 | ||||
-rw-r--r-- | drivers/staging/iio/Documentation/lsiio.c | 20 |
3 files changed, 24 insertions, 7 deletions
diff --git a/drivers/staging/iio/Documentation/generic_buffer.c b/drivers/staging/iio/Documentation/generic_buffer.c index 2671bf9433cb..de4647e2495e 100644 --- a/drivers/staging/iio/Documentation/generic_buffer.c +++ b/drivers/staging/iio/Documentation/generic_buffer.c @@ -47,6 +47,7 @@ int size_from_channelarray(struct iio_channel_info *channels, int num_channels) { int bytes = 0; int i = 0; + while (i < num_channels) { if (bytes % channels[i].bytes == 0) channels[i].location = bytes; @@ -74,12 +75,14 @@ void print2byte(int input, struct iio_channel_info *info) input = input >> info->shift; if (info->is_signed) { int16_t val = input; + val &= (1 << info->bits_used) - 1; val = (int16_t)(val << (16 - info->bits_used)) >> (16 - info->bits_used); printf("%05f ", ((float)val + info->offset)*info->scale); } else { uint16_t val = input; + val &= (1 << info->bits_used) - 1; printf("%05f ", ((float)val + info->offset)*info->scale); } @@ -97,6 +100,7 @@ void process_scan(char *data, int num_channels) { int k; + for (k = 0; k < num_channels; k++) switch (channels[k].bytes) { /* only a few cases implemented so far */ diff --git a/drivers/staging/iio/Documentation/iio_utils.h b/drivers/staging/iio/Documentation/iio_utils.h index 0973a092224a..568eff06f803 100644 --- a/drivers/staging/iio/Documentation/iio_utils.h +++ b/drivers/staging/iio/Documentation/iio_utils.h @@ -34,6 +34,7 @@ inline int iioutils_break_up_name(const char *full_name, char *current; char *w, *r; char *working; + current = strdup(full_name); working = strtok(current, "_\0"); w = working; @@ -335,6 +336,7 @@ inline int build_channel_array(const char *device_dir, if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_en"), "_en") == 0) { int current_enabled = 0; + current = &(*ci_array)[count++]; ret = asprintf(&filename, "%s/%s", scan_el_dir, ent->d_name); @@ -506,6 +508,7 @@ inline int _write_sysfs_int(char *filename, char *basedir, int val, int verify) FILE *sysfsfp; int test; char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) return -ENOMEM; sprintf(temp, "%s/%s", basedir, filename); @@ -554,6 +557,7 @@ int _write_sysfs_string(char *filename, char *basedir, char *val, int verify) int ret = 0; FILE *sysfsfp; char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) { printf("Memory allocation failed\n"); return -ENOMEM; @@ -614,6 +618,7 @@ int read_sysfs_posint(char *filename, char *basedir) int ret; FILE *sysfsfp; char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) { printf("Memory allocation failed"); return -ENOMEM; @@ -636,6 +641,7 @@ int read_sysfs_float(char *filename, char *basedir, float *val) int ret = 0; FILE *sysfsfp; char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) { printf("Memory allocation failed"); return -ENOMEM; @@ -658,6 +664,7 @@ int read_sysfs_string(const char *filename, const char *basedir, char *str) int ret = 0; FILE *sysfsfp; char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) { printf("Memory allocation failed"); return -ENOMEM; diff --git a/drivers/staging/iio/Documentation/lsiio.c b/drivers/staging/iio/Documentation/lsiio.c index 24ae9694eb41..98a0de098130 100644 --- a/drivers/staging/iio/Documentation/lsiio.c +++ b/drivers/staging/iio/Documentation/lsiio.c @@ -46,6 +46,7 @@ static int dump_channels(const char *dev_dir_name) { DIR *dp; const struct dirent *ent; + dp = opendir(dev_dir_name); if (dp == NULL) return -errno; @@ -62,17 +63,17 @@ static int dump_one_device(const char *dev_dir_name) { char name[IIO_MAX_NAME_LENGTH]; int dev_idx; + int retval; - sscanf(dev_dir_name + strlen(iio_dir) + strlen(type_device), + retval = sscanf(dev_dir_name + strlen(iio_dir) + strlen(type_device), "%i", &dev_idx); + if (retval != 1) + return -EINVAL; read_sysfs_string("name", dev_dir_name, name); printf("Device %03d: %s\n", dev_idx, name); - if (verblevel >= VERBLEVEL_SENSORS) { - int ret = dump_channels(dev_dir_name); - if (ret) - return ret; - } + if (verblevel >= VERBLEVEL_SENSORS) + return dump_channels(dev_dir_name); return 0; } @@ -80,9 +81,12 @@ static int dump_one_trigger(const char *dev_dir_name) { char name[IIO_MAX_NAME_LENGTH]; int dev_idx; + int retval; - sscanf(dev_dir_name + strlen(iio_dir) + strlen(type_trigger), + retval = sscanf(dev_dir_name + strlen(iio_dir) + strlen(type_trigger), "%i", &dev_idx); + if (retval != 1) + return -EINVAL; read_sysfs_string("name", dev_dir_name, name); printf("Trigger %03d: %s\n", dev_idx, name); return 0; @@ -107,6 +111,7 @@ static void dump_devices(void) while (ent = readdir(dp), ent != NULL) { if (check_prefix(ent->d_name, type_device)) { char *dev_dir_name; + asprintf(&dev_dir_name, "%s%s", iio_dir, ent->d_name); dump_one_device(dev_dir_name); free(dev_dir_name); @@ -118,6 +123,7 @@ static void dump_devices(void) while (ent = readdir(dp), ent != NULL) { if (check_prefix(ent->d_name, type_trigger)) { char *dev_dir_name; + asprintf(&dev_dir_name, "%s%s", iio_dir, ent->d_name); dump_one_trigger(dev_dir_name); free(dev_dir_name); |