summaryrefslogtreecommitdiff
path: root/tools/iio/lsiio.c
diff options
context:
space:
mode:
authorHartmut Knaack <knaack.h@gmx.de>2015-05-31 14:40:15 +0200
committerJonathan Cameron <jic23@kernel.org>2015-05-31 19:45:00 +0100
commitacf50b3586f8d8a7530b905e111dda41876d38f4 (patch)
treedcc9ac4a39397c5ef274c021e67f4c41a59eaab7 /tools/iio/lsiio.c
parent53118557b6a9c263e4a80825da367b2116529541 (diff)
tools:iio:lsiio: add error handling
Add error handling to calls which can indicate a major problem by returning an error code. This also involves to change the type of dump_devices() from void to int. Signed-off-by: Hartmut Knaack <knaack.h@gmx.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'tools/iio/lsiio.c')
-rw-r--r--tools/iio/lsiio.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/tools/iio/lsiio.c b/tools/iio/lsiio.c
index daa6c5312d66..b1089adb7d3a 100644
--- a/tools/iio/lsiio.c
+++ b/tools/iio/lsiio.c
@@ -69,7 +69,10 @@ static int dump_one_device(const char *dev_dir_name)
"%i", &dev_idx);
if (retval != 1)
return -EINVAL;
- read_sysfs_string("name", dev_dir_name, name);
+ retval = read_sysfs_string("name", dev_dir_name, name);
+ if (retval)
+ return retval;
+
printf("Device %03d: %s\n", dev_idx, name);
if (verblevel >= VERBLEVEL_SENSORS)
@@ -87,20 +90,24 @@ static int dump_one_trigger(const char *dev_dir_name)
"%i", &dev_idx);
if (retval != 1)
return -EINVAL;
- read_sysfs_string("name", dev_dir_name, name);
+ retval = read_sysfs_string("name", dev_dir_name, name);
+ if (retval)
+ return retval;
+
printf("Trigger %03d: %s\n", dev_idx, name);
return 0;
}
-static void dump_devices(void)
+static int dump_devices(void)
{
const struct dirent *ent;
+ int ret;
DIR *dp;
dp = opendir(iio_dir);
if (dp == NULL) {
printf("No industrial I/O devices available\n");
- return;
+ return -ENODEV;
}
while (ent = readdir(dp), ent != NULL) {
@@ -109,11 +116,16 @@ static void dump_devices(void)
if (asprintf(&dev_dir_name, "%s%s", iio_dir,
ent->d_name) < 0) {
- printf("Memory allocation failed\n");
+ ret = -ENOMEM;
+ goto error_close_dir;
+ }
+
+ ret = dump_one_device(dev_dir_name);
+ if (ret) {
+ free(dev_dir_name);
goto error_close_dir;
}
- dump_one_device(dev_dir_name);
free(dev_dir_name);
if (verblevel >= VERBLEVEL_SENSORS)
printf("\n");
@@ -126,16 +138,26 @@ static void dump_devices(void)
if (asprintf(&dev_dir_name, "%s%s", iio_dir,
ent->d_name) < 0) {
- printf("Memory allocation failed\n");
+ ret = -ENOMEM;
+ goto error_close_dir;
+ }
+
+ ret = dump_one_trigger(dev_dir_name);
+ if (ret) {
+ free(dev_dir_name);
goto error_close_dir;
}
- dump_one_trigger(dev_dir_name);
free(dev_dir_name);
}
}
+ return (closedir(dp) == -1) ? -errno : 0;
+
error_close_dir:
- closedir(dp);
+ if (closedir(dp) == -1)
+ perror("dump_devices(): Failed to close directory");
+
+ return ret;
}
int main(int argc, char **argv)
@@ -163,7 +185,5 @@ int main(int argc, char **argv)
exit(1);
}
- dump_devices();
-
- return 0;
+ return dump_devices();
}