diff mbox series

[1/2] lib: fwts_ac_adapter: fix readdir(ac_power_dir) failing

Message ID 20190110053407.9154-1-alex.hung@canonical.com
State Superseded
Headers show
Series [1/2] lib: fwts_ac_adapter: fix readdir(ac_power_dir) failing | expand

Commit Message

Alex Hung Jan. 10, 2019, 5:34 a.m. UTC
As readdir() returns next directory, readdir(ac_power_dir) needs to be
closed and re-opened.

Signed-off-by: Alex Hung <alex.hung@canonical.com>
---
 src/lib/src/fwts_ac_adapter.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Colin Ian King Jan. 10, 2019, 9:23 a.m. UTC | #1
On 10/01/2019 05:34, Alex Hung wrote:
> As readdir() returns next directory, readdir(ac_power_dir) needs to be
> closed and re-opened.
> 
> Signed-off-by: Alex Hung <alex.hung@canonical.com>
> ---
>  src/lib/src/fwts_ac_adapter.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/src/lib/src/fwts_ac_adapter.c b/src/lib/src/fwts_ac_adapter.c
> index 9dd828f7..de2242a2 100644
> --- a/src/lib/src/fwts_ac_adapter.c
> +++ b/src/lib/src/fwts_ac_adapter.c
> @@ -90,6 +90,7 @@ int fwts_ac_adapter_get_state(const int state, int *matching, int *not_matching)
>  			return FWTS_ERROR;
>  		}
>  
> +		(void)closedir(ac_power_dir);
>  		ac_interface = &fwts_ac_interfaces[SYS_INTERFACE];
>  	/* then try older /proc interface  */
>  	} else if ((ac_power_dir = opendir(FWTS_PROC_ACPI_AC_ADAPTER))) {
> @@ -98,6 +99,8 @@ int fwts_ac_adapter_get_state(const int state, int *matching, int *not_matching)
>  		return FWTS_ERROR;
>  	}
>  
> +	if (!(ac_power_dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)))
> +		return FWTS_ERROR;

This may open the wrong directory, there could be the case where the
older /proc interface is being used in which case re-opening
FWTS_SYS_CLASS_POWER_SUPPLY is not correct.

I'd prefer just using rewinddir(ac_power_dir) instead.


>  	do {
>  		entry = readdir(ac_power_dir);
>  		if (entry && strlen(entry->d_name) > 2) {
>
Ivan Hu Jan. 14, 2019, 9:56 a.m. UTC | #2
On 1/10/19 1:34 PM, Alex Hung wrote:
> As readdir() returns next directory, readdir(ac_power_dir) needs to be
> closed and re-opened.
>
> Signed-off-by: Alex Hung <alex.hung@canonical.com>
> ---
>  src/lib/src/fwts_ac_adapter.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/src/lib/src/fwts_ac_adapter.c b/src/lib/src/fwts_ac_adapter.c
> index 9dd828f7..de2242a2 100644
> --- a/src/lib/src/fwts_ac_adapter.c
> +++ b/src/lib/src/fwts_ac_adapter.c
> @@ -90,6 +90,7 @@ int fwts_ac_adapter_get_state(const int state, int *matching, int *not_matching)
>  			return FWTS_ERROR;
>  		}
>  
> +		(void)closedir(ac_power_dir);
>  		ac_interface = &fwts_ac_interfaces[SYS_INTERFACE];
>  	/* then try older /proc interface  */
>  	} else if ((ac_power_dir = opendir(FWTS_PROC_ACPI_AC_ADAPTER))) {
> @@ -98,6 +99,8 @@ int fwts_ac_adapter_get_state(const int state, int *matching, int *not_matching)
>  		return FWTS_ERROR;
>  	}
>  
> +	if (!(ac_power_dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)))
> +		return FWTS_ERROR;
>  	do {
>  		entry = readdir(ac_power_dir);
>  		if (entry && strlen(entry->d_name) > 2) {


Acked-by: Ivan Hu <ivan.hu@canonical.com>
diff mbox series

Patch

diff --git a/src/lib/src/fwts_ac_adapter.c b/src/lib/src/fwts_ac_adapter.c
index 9dd828f7..de2242a2 100644
--- a/src/lib/src/fwts_ac_adapter.c
+++ b/src/lib/src/fwts_ac_adapter.c
@@ -90,6 +90,7 @@  int fwts_ac_adapter_get_state(const int state, int *matching, int *not_matching)
 			return FWTS_ERROR;
 		}
 
+		(void)closedir(ac_power_dir);
 		ac_interface = &fwts_ac_interfaces[SYS_INTERFACE];
 	/* then try older /proc interface  */
 	} else if ((ac_power_dir = opendir(FWTS_PROC_ACPI_AC_ADAPTER))) {
@@ -98,6 +99,8 @@  int fwts_ac_adapter_get_state(const int state, int *matching, int *not_matching)
 		return FWTS_ERROR;
 	}
 
+	if (!(ac_power_dir = opendir(FWTS_SYS_CLASS_POWER_SUPPLY)))
+		return FWTS_ERROR;
 	do {
 		entry = readdir(ac_power_dir);
 		if (entry && strlen(entry->d_name) > 2) {