Merge tag 'for-linus-20150909' of git://git.infradead.org/linux-mtd
[firefly-linux-kernel-4.4.55.git] / tools / iio / iio_utils.c
index c3f9e37333e73c2f8c1856b3debec3ec177acbb1..5eb6793f3972e64ed2c46533cd2e6aa5d65168fa 100644 (file)
@@ -6,9 +6,6 @@
  * under the terms of the GNU General Public License version 2 as published by
  * the Free Software Foundation.
  */
-#ifndef _IIO_UTILS_H
-#define _IIO_UTILS_H
-
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -168,7 +165,7 @@ int iioutils_get_type(unsigned *is_signed, unsigned *bytes, unsigned *bits_used,
                        if (*bits_used == 64)
                                *mask = ~0;
                        else
-                               *mask = (1 << *bits_used) - 1;
+                               *mask = (1ULL << *bits_used) - 1;
 
                        *is_signed = (signchar == 's');
                        if (fclose(sysfsfp)) {
@@ -289,17 +286,17 @@ error_free_builtname:
  * @cnt: the amount of array elements
  **/
 
-void bsort_channel_array_by_index(struct iio_channel_info **ci_array, int cnt)
+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;
+                       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;
                        }
 }
 
@@ -487,7 +484,7 @@ int build_channel_array(const char *device_dir,
                                                       device_dir,
                                                       current->name,
                                                       current->generic_name);
-                       if (ret < 0)
+                       if ((ret < 0) && (ret != -ENOENT))
                                goto error_cleanup_array;
 
                        ret = iioutils_get_param_float(&current->offset,
@@ -495,7 +492,7 @@ int build_channel_array(const char *device_dir,
                                                       device_dir,
                                                       current->name,
                                                       current->generic_name);
-                       if (ret < 0)
+                       if ((ret < 0) && (ret != -ENOENT))
                                goto error_cleanup_array;
 
                        ret = iioutils_get_type(&current->is_signed,
@@ -519,7 +516,7 @@ int build_channel_array(const char *device_dir,
 
        free(scan_el_dir);
        /* reorder so that the array is in index order */
-       bsort_channel_array_by_index(ci_array, *counter);
+       bsort_channel_array_by_index(*ci_array, *counter);
 
        return 0;
 
@@ -529,6 +526,8 @@ error_cleanup_array:
                free((*ci_array)[i].generic_name);
        }
        free(*ci_array);
+       *ci_array = NULL;
+       *counter = 0;
 error_close_dir:
        if (dp)
                if (closedir(dp) == -1)
@@ -540,7 +539,7 @@ error_free_name:
        return ret;
 }
 
-int calc_digits(int num)
+static int calc_digits(int num)
 {
        int count = 0;
 
@@ -990,5 +989,3 @@ error_free:
 
        return ret;
 }
-
-#endif /* _IIO_UTILS_H */