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

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

 



On 31/05/15 13:40, Hartmut Knaack wrote:
> 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>
Applied.
> ---
>  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();
>  }
> 

--
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