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 |
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) { >
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 --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) {
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(+)