[PATCH 22/32] tools:iio:lsiio: add error handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxx>
---
 tools/iio/lsiio.c | 44 ++++++++++++++++++++++++++++++++------------
 1 file changed, 32 insertions(+), 12 deletions(-)

diff --git a/tools/iio/lsiio.c b/tools/iio/lsiio.c
index daa6c53..b1089ad 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();
 }
-- 
2.3.6

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux