diff options
author | Hartmut Knaack <knaack.h@gmx.de> | 2015-05-31 14:40:15 +0200 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2015-05-31 19:45:00 +0100 |
commit | acf50b3586f8d8a7530b905e111dda41876d38f4 (patch) | |
tree | dcc9ac4a39397c5ef274c021e67f4c41a59eaab7 /tools/iio/lsiio.c | |
parent | 53118557b6a9c263e4a80825da367b2116529541 (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.c | 44 |
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(); } |