Commit f8db97683df5251731308a70da1163746f01bc93
Committed by
Nitin Garg
1 parent
f6d6492aa1
Exists in
smarc-imx_4.9.88_2.0.0_ga
and in
2 other branches
lib/string: add sysfs_match_string helper
Make a simple helper for matching strings with sysfs attribute files. In most parts the same as match_string(), except sysfs_match_string() uses sysfs_streq() instead of strcmp() for matching. This is more convenient when used with sysfs attributes. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Reviewed-by: Felipe Balbi <felipe.balbi@linux.intel.com> Tested-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> (cherry picked from commit e1fe7b6a7b376bfb54558725ddb2a89aaaa4adcc)
Showing 2 changed files with 36 additions and 0 deletions Side-by-side Diff
include/linux/string.h
... | ... | @@ -136,6 +136,16 @@ |
136 | 136 | } |
137 | 137 | |
138 | 138 | int match_string(const char * const *array, size_t n, const char *string); |
139 | +int __sysfs_match_string(const char * const *array, size_t n, const char *s); | |
140 | + | |
141 | +/** | |
142 | + * sysfs_match_string - matches given string in an array | |
143 | + * @_a: array of strings | |
144 | + * @_s: string to match with | |
145 | + * | |
146 | + * Helper for __sysfs_match_string(). Calculates the size of @a automatically. | |
147 | + */ | |
148 | +#define sysfs_match_string(_a, _s) __sysfs_match_string(_a, ARRAY_SIZE(_a), _s) | |
139 | 149 | |
140 | 150 | #ifdef CONFIG_BINARY_PRINTF |
141 | 151 | int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args); |
lib/string.c
... | ... | @@ -656,6 +656,32 @@ |
656 | 656 | } |
657 | 657 | EXPORT_SYMBOL(match_string); |
658 | 658 | |
659 | +/** | |
660 | + * __sysfs_match_string - matches given string in an array | |
661 | + * @array: array of strings | |
662 | + * @n: number of strings in the array or -1 for NULL terminated arrays | |
663 | + * @str: string to match with | |
664 | + * | |
665 | + * Returns index of @str in the @array or -EINVAL, just like match_string(). | |
666 | + * Uses sysfs_streq instead of strcmp for matching. | |
667 | + */ | |
668 | +int __sysfs_match_string(const char * const *array, size_t n, const char *str) | |
669 | +{ | |
670 | + const char *item; | |
671 | + int index; | |
672 | + | |
673 | + for (index = 0; index < n; index++) { | |
674 | + item = array[index]; | |
675 | + if (!item) | |
676 | + break; | |
677 | + if (sysfs_streq(item, str)) | |
678 | + return index; | |
679 | + } | |
680 | + | |
681 | + return -EINVAL; | |
682 | +} | |
683 | +EXPORT_SYMBOL(__sysfs_match_string); | |
684 | + | |
659 | 685 | #ifndef __HAVE_ARCH_MEMSET |
660 | 686 | /** |
661 | 687 | * memset - Fill a region of memory with the given value |