From ad0f85c44019288513fcd6a00ae4aa54bc46c3fe Mon Sep 17 00:00:00 2001 From: Michael Hennerich Date: Tue, 8 Mar 2011 08:55:48 +0100 Subject: [PATCH] --- yaml --- r: 236343 b: refs/heads/master c: 8b68bb20812ba82460e22942ae22ce45880df232 h: refs/heads/master i: 236341: 9205b382cac3829eacfe4b62fa93e2299fe361d9 236339: 15e43eb154bfe8746bf1e8f6a134cafe5c508db5 236335: c5dbf63873ad7ec4c275f342b399385f598083e4 v: v3 --- [refs] | 2 +- .../staging/iio/Documentation/iio_utils.h | 56 +++++++++++-------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/[refs] b/[refs] index d7ddef8568f6..8252bd3287ff 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 14f88f1b07e03b064b86ebc9f2f1ed0719dfaa30 +refs/heads/master: 8b68bb20812ba82460e22942ae22ce45880df232 diff --git a/trunk/drivers/staging/iio/Documentation/iio_utils.h b/trunk/drivers/staging/iio/Documentation/iio_utils.h index 1b33c040bad7..8095727b3966 100644 --- a/trunk/drivers/staging/iio/Documentation/iio_utils.h +++ b/trunk/drivers/staging/iio/Documentation/iio_utils.h @@ -51,7 +51,7 @@ static int iioutils_break_up_name(const char *full_name, w = working; r = working; - while(*r != '\0') { + while (*r != '\0') { if (!isdigit(*r)) { *w = *r; w++; @@ -242,6 +242,26 @@ inline int iioutils_get_param_float(float *output, return ret; } +/** + * bsort_channel_array_by_index() - reorder so that the array is in index order + * + **/ + +inline void bsort_channel_array_by_index(struct iio_channel_info **ci_array, + int cnt) +{ + + struct iio_channel_info temp; + int x, y; + + for (x = 0; x < cnt; x++) + for (y = 0; y < (cnt - 1); y++) + if ((*ci_array)[y].index > (*ci_array)[y+1].index) { + temp = (*ci_array)[y + 1]; + (*ci_array)[y + 1] = (*ci_array)[y]; + (*ci_array)[y] = temp; + } +} /** * build_channel_array() - function to figure out what channels are present @@ -254,7 +274,7 @@ inline int build_channel_array(const char *device_dir, { DIR *dp; FILE *sysfsfp; - int count = 0, temp, i; + int count, temp, i; struct iio_channel_info *current; int ret; const struct dirent *ent; @@ -290,11 +310,10 @@ inline int build_channel_array(const char *device_dir, fscanf(sysfsfp, "%u", &ret); if (ret == 1) (*counter)++; - count++; fclose(sysfsfp); free(filename); } - *ci_array = malloc(sizeof(**ci_array)*count); + *ci_array = malloc(sizeof(**ci_array) * (*counter)); if (*ci_array == NULL) { ret = -ENOMEM; goto error_close_dir; @@ -321,6 +340,13 @@ inline int build_channel_array(const char *device_dir, } fscanf(sysfsfp, "%u", ¤t->enabled); fclose(sysfsfp); + + if (!current->enabled) { + free(filename); + count--; + continue; + } + current->scale = 1.0; current->offset = 0; current->name = strndup(ent->d_name, @@ -375,26 +401,10 @@ inline int build_channel_array(const char *device_dir, current->generic_name); } } - /* reorder so that the array is in index order*/ - current = malloc(sizeof(**ci_array)*(*counter)); - if (current == NULL) { - ret = -ENOMEM; - goto error_cleanup_array; - } + closedir(dp); - count = 0; - temp = 0; - while (count < *counter) - for (i = 0; i < *counter; i++) - if ((*ci_array)[i].index == temp) { - memcpy(¤t[count++], - &(*ci_array)[i], - sizeof(*current)); - temp++; - break; - } - free(*ci_array); - *ci_array = current; + /* reorder so that the array is in index order */ + bsort_channel_array_by_index(ci_array, *counter); return 0;