Message ID | 20190508111913.7276-1-alexandru.ardelean@analog.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3,V3] lib: fix __sysfs_match_string() helper when n != -1 | expand |
On Wed, 2019-05-08 at 14:19 +0300, Alexandru Ardelean wrote: > The documentation the `__sysfs_match_string()` helper mentions that `n` > (the size of the given array) should be: > * @n: number of strings in the array or -1 for NULL terminated arrays > > The behavior of the function is different, in the sense that it exits on > the first NULL element in the array. > > This patch changes the behavior, to exit the loop when a NULL element is > found, and the size of the array is provided as -1. > > All current users of __sysfs_match_string() & sysfs_match_string() provide > contiguous arrays of strings, so this behavior change doesn't influence > anything (at this point in time). > > This behavior change allows for an array of strings to have NULL elements > within the array, which will be ignored. This is particularly useful when > creating mapping of strings and integers (as bitfields or other HW > description). > Hey, I did not see any reaction on this. Do I need to do something on this (re-spin, add other people, re-send as standalone patch, etc) ? Thanks Alex > Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> > --- > > Changelog v2 -> v3: > * fix __sysfs_match_string() vs adding a new > __sysfs_match_string_with_gaps() helper > > lib/string.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/lib/string.c b/lib/string.c > index 3ab861c1a857..5bea3f98478a 100644 > --- a/lib/string.c > +++ b/lib/string.c > @@ -674,8 +674,11 @@ int __sysfs_match_string(const char * const *array, size_t n, const char *str) > > for (index = 0; index < n; index++) { > item = array[index]; > - if (!item) > + if (!item) { > + if (n != (size_t)-1) > + continue; > break; > + } > if (sysfs_streq(item, str)) > return index; > }
On Wed, 8 May 2019 14:19:11 +0300 Alexandru Ardelean <alexandru.ardelean@analog.com> wrote: > The documentation the `__sysfs_match_string()` helper mentions that `n` > (the size of the given array) should be: > * @n: number of strings in the array or -1 for NULL terminated arrays > > The behavior of the function is different, in the sense that it exits on > the first NULL element in the array. > > This patch changes the behavior, to exit the loop when a NULL element is > found, and the size of the array is provided as -1. > > All current users of __sysfs_match_string() & sysfs_match_string() provide > contiguous arrays of strings, so this behavior change doesn't influence > anything (at this point in time). > > This behavior change allows for an array of strings to have NULL elements > within the array, which will be ignored. This is particularly useful when > creating mapping of strings and integers (as bitfields or other HW > description). > > Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> Looks good to me. I can take it through IIO given patch 3, but fine with it taking another route if people would prefer as I don't think the two 'need' to go together. Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > > Changelog v2 -> v3: > * fix __sysfs_match_string() vs adding a new > __sysfs_match_string_with_gaps() helper > > lib/string.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/lib/string.c b/lib/string.c > index 3ab861c1a857..5bea3f98478a 100644 > --- a/lib/string.c > +++ b/lib/string.c > @@ -674,8 +674,11 @@ int __sysfs_match_string(const char * const *array, size_t n, const char *str) > > for (index = 0; index < n; index++) { > item = array[index]; > - if (!item) > + if (!item) { > + if (n != (size_t)-1) > + continue; > break; > + } > if (sysfs_streq(item, str)) > return index; > }
diff --git a/lib/string.c b/lib/string.c index 3ab861c1a857..5bea3f98478a 100644 --- a/lib/string.c +++ b/lib/string.c @@ -674,8 +674,11 @@ int __sysfs_match_string(const char * const *array, size_t n, const char *str) for (index = 0; index < n; index++) { item = array[index]; - if (!item) + if (!item) { + if (n != (size_t)-1) + continue; break; + } if (sysfs_streq(item, str)) return index; }
The documentation the `__sysfs_match_string()` helper mentions that `n` (the size of the given array) should be: * @n: number of strings in the array or -1 for NULL terminated arrays The behavior of the function is different, in the sense that it exits on the first NULL element in the array. This patch changes the behavior, to exit the loop when a NULL element is found, and the size of the array is provided as -1. All current users of __sysfs_match_string() & sysfs_match_string() provide contiguous arrays of strings, so this behavior change doesn't influence anything (at this point in time). This behavior change allows for an array of strings to have NULL elements within the array, which will be ignored. This is particularly useful when creating mapping of strings and integers (as bitfields or other HW description). Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> --- Changelog v2 -> v3: * fix __sysfs_match_string() vs adding a new __sysfs_match_string_with_gaps() helper lib/string.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)