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.
Showing the changes to lib/string.c (1 of 2 files). Show all
Unified · Split
| @@ -656,6 +656,32 @@ int match_string(const char * const *array, size_t n, const char *string) · 655 unmodified lines | ||
| 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 |