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.
Unified · Split
| @@ -135,6 +135,16 @@ static inline int strtobool(const char *s, bool *res) · 134 unmodified lines | |||
| 135 | } | 135 | } |
| 136 | 136 | ||
| 137 | int match_string(const char * const *array, size_t n, const char *string); | 137 | int match_string(const char * const *array, size_t n, const char *string); |
| 138 | int __sysfs_match_string(const char * const *array, size_t n, const char *s); | ||
| 139 | |||
| 140 | /** | ||
| 141 | * sysfs_match_string - matches given string in an array | ||
| 142 | * @_a: array of strings | ||
| 143 | * @_s: string to match with | ||
| 144 | * | ||
| 145 | * Helper for __sysfs_match_string(). Calculates the size of @a automatically. | ||
| 146 | */ | ||
| 147 | #define sysfs_match_string(_a, _s) __sysfs_match_string(_a, ARRAY_SIZE(_a), _s) | ||
| 138 | 148 | ||
| 139 | #ifdef CONFIG_BINARY_PRINTF | 149 | #ifdef CONFIG_BINARY_PRINTF |
| 140 | int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args); | 150 | int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args); |
| @@ -656,6 +656,32 @@ int match_string(const char * const *array, size_t n, const char *string) · 655 unmodified lines | |||
| 656 | } | 656 | } |
| 657 | EXPORT_SYMBOL(match_string); | 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 | #ifndef __HAVE_ARCH_MEMSET | 685 | #ifndef __HAVE_ARCH_MEMSET |
| 660 | /** | 686 | /** |
| 661 | * memset - Fill a region of memory with the given value | 687 | * memset - Fill a region of memory with the given value |