w = working;
r = working;
- while(*r != '\0') {
+ while (*r != '\0') {
if (!isdigit(*r)) {
*w = *r;
w++;
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
{
DIR *dp;
FILE *sysfsfp;
- int count = 0, temp, i;
+ int count, temp, i;
struct iio_channel_info *current;
int ret;
const struct dirent *ent;
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;
}
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,
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;