mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
lib/string.c: remove duplicated function
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>
This commit is contained in:
parent
e48510f451
commit
cd514e727b
27
lib/string.c
27
lib/string.c
@ -27,14 +27,14 @@
|
|||||||
#include <linux/bug.h>
|
#include <linux/bug.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.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;
|
||||||
@ -56,6 +56,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
|
||||||
|
|
||||||
@ -73,20 +80,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
Block a user