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>
This commit is contained in:
parent
d8d022e033
commit
6dcc31529a
27
lib/string.c
27
lib/string.c
|
@ -31,14 +31,14 @@
|
||||||
#include <asm/word-at-a-time.h>
|
#include <asm/word-at-a-time.h>
|
||||||
#include <asm/page.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
|
* @s1: One string
|
||||||
* @s2: The other string
|
* @s2: The other string
|
||||||
* @len: the maximum number of characters to compare
|
* @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 */
|
/* Yes, Virginia, it had better be unsigned */
|
||||||
unsigned char c1, c2;
|
unsigned char c1, c2;
|
||||||
|
@ -60,6 +60,13 @@ int strnicmp(const char *s1, const char *s2, size_t len)
|
||||||
} while (--len);
|
} while (--len);
|
||||||
return (int)c1 - (int)c2;
|
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);
|
EXPORT_SYMBOL(strnicmp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -77,20 +84,6 @@ int strcasecmp(const char *s1, const char *s2)
|
||||||
EXPORT_SYMBOL(strcasecmp);
|
EXPORT_SYMBOL(strcasecmp);
|
||||||
#endif
|
#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
|
#ifndef __HAVE_ARCH_STRCPY
|
||||||
/**
|
/**
|
||||||
* strcpy - Copy a %NUL terminated string
|
* strcpy - Copy a %NUL terminated string
|
||||||
|
|
Loading…
Reference in New Issue