| From: Rasmus Villemoes <linux@rasmusvillemoes.dk> |
| Date: Mon, 13 Oct 2014 15:54:25 -0700 |
| Subject: lib/string.c: remove duplicated function |
| |
| commit cd514e727b18ff4d189b8e268db13729a4175091 upstream. |
| |
| lib/string.c contains two functions, strnicmp and strncasecmp, which do |
| roughly the same thing, namely compare two strings case-insensitively up |
| to a given bound. They have slightly different implementations, but the |
| only important difference is that strncasecmp doesn't handle len==0 |
| appropriately; it effectively becomes strcasecmp in that case. strnicmp |
| correctly says that two strings are always equal in their first 0 |
| characters. |
| |
| strncasecmp is the POSIX name for this functionality. So rename the |
| non-broken function to the standard name. To minimize the impact on the |
| rest of the kernel (and since both are exported to modules), make strnicmp |
| a wrapper for strncasecmp. |
| |
| Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk> |
| Cc: Grant Likely <grant.likely@linaro.org> |
| Cc: Andi Kleen <ak@linux.intel.com> |
| Cc: Dan Carpenter <dan.carpenter@oracle.com> |
| Cc: "H. Peter Anvin" <hpa@linux.intel.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| lib/string.c | 27 ++++++++++----------------- |
| 1 file changed, 10 insertions(+), 17 deletions(-) |
| |
| --- a/lib/string.c |
| +++ b/lib/string.c |
| @@ -31,14 +31,14 @@ |
| #include <asm/word-at-a-time.h> |
| #include <asm/page.h> |
| |
| -#ifndef __HAVE_ARCH_STRNICMP |
| +#ifndef __HAVE_ARCH_STRNCASECMP |
| /** |
| - * strnicmp - Case insensitive, length-limited string comparison |
| + * strncasecmp - Case insensitive, length-limited string comparison |
| * @s1: One string |
| * @s2: The other string |
| * @len: the maximum number of characters to compare |
| */ |
| -int strnicmp(const char *s1, const char *s2, size_t len) |
| +int strncasecmp(const char *s1, const char *s2, size_t len) |
| { |
| /* Yes, Virginia, it had better be unsigned */ |
| unsigned char c1, c2; |
| @@ -60,6 +60,13 @@ int strnicmp(const char *s1, const char |
| } while (--len); |
| return (int)c1 - (int)c2; |
| } |
| +EXPORT_SYMBOL(strncasecmp); |
| +#endif |
| +#ifndef __HAVE_ARCH_STRNICMP |
| +int strnicmp(const char *s1, const char *s2, size_t len) |
| +{ |
| + return strncasecmp(s1, s2, len); |
| +} |
| EXPORT_SYMBOL(strnicmp); |
| #endif |
| |
| @@ -77,20 +84,6 @@ int strcasecmp(const char *s1, const cha |
| EXPORT_SYMBOL(strcasecmp); |
| #endif |
| |
| -#ifndef __HAVE_ARCH_STRNCASECMP |
| -int strncasecmp(const char *s1, const char *s2, size_t n) |
| -{ |
| - int c1, c2; |
| - |
| - do { |
| - c1 = tolower(*s1++); |
| - c2 = tolower(*s2++); |
| - } while ((--n > 0) && c1 == c2 && c1 != 0); |
| - return c1 - c2; |
| -} |
| -EXPORT_SYMBOL(strncasecmp); |
| -#endif |
| - |
| #ifndef __HAVE_ARCH_STRCPY |
| /** |
| * strcpy - Copy a %NUL terminated string |