[STRING]: Move strcasecmp/strncasecmp to lib/string.c
We have several platforms using local copies of identical code. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
					parent
					
						
							
								357418e7ca
							
						
					
				
			
			
				commit
				
					
						ded220bd8f
					
				
			
		
					 17 changed files with 39 additions and 151 deletions
				
			
		|  | @ -36,7 +36,6 @@ lib-y =	__divqu.o __remqu.o __divlu.o __remlu.o \ | |||
| 	$(ev6-y)csum_ipv6_magic.o \
 | ||||
| 	$(ev6-y)clear_page.o \
 | ||||
| 	$(ev6-y)copy_page.o \
 | ||||
| 	strcasecmp.o \
 | ||||
| 	fpreg.o \
 | ||||
| 	callback_srm.o srm_puts.o srm_printk.o | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,26 +0,0 @@ | |||
| /*
 | ||||
|  *  linux/arch/alpha/lib/strcasecmp.c | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/string.h> | ||||
| 
 | ||||
| 
 | ||||
| /* We handle nothing here except the C locale.  Since this is used in
 | ||||
|    only one place, on strings known to contain only 7 bit ASCII, this | ||||
|    is ok.  */ | ||||
| 
 | ||||
| int strcasecmp(const char *a, const char *b) | ||||
| { | ||||
| 	int ca, cb; | ||||
| 
 | ||||
| 	do { | ||||
| 		ca = *a++ & 0xff; | ||||
| 		cb = *b++ & 0xff; | ||||
| 		if (ca >= 'A' && ca <= 'Z') | ||||
| 			ca += 'a' - 'A'; | ||||
| 		if (cb >= 'A' && cb <= 'Z') | ||||
| 			cb += 'a' - 'A'; | ||||
| 	} while (ca == cb && ca != '\0'); | ||||
| 
 | ||||
| 	return ca - cb; | ||||
| } | ||||
|  | @ -84,8 +84,6 @@ EXPORT_SYMBOL(strncpy); | |||
| EXPORT_SYMBOL(strcat); | ||||
| EXPORT_SYMBOL(strlen); | ||||
| EXPORT_SYMBOL(strcmp); | ||||
| EXPORT_SYMBOL(strcasecmp); | ||||
| EXPORT_SYMBOL(strncasecmp); | ||||
| 
 | ||||
| EXPORT_SYMBOL(csum_partial); | ||||
| EXPORT_SYMBOL(csum_partial_copy_generic); | ||||
|  |  | |||
|  | @ -7,13 +7,12 @@ EXTRA_CFLAGS		+= -mno-minimal-toc | |||
| endif | ||||
| 
 | ||||
| ifeq ($(CONFIG_PPC_MERGE),y) | ||||
| obj-y			:= string.o strcase.o | ||||
| obj-y			:= string.o | ||||
| obj-$(CONFIG_PPC32)	+= div64.o copy_32.o checksum_32.o | ||||
| endif | ||||
| 
 | ||||
| obj-$(CONFIG_PPC64)	+= checksum_64.o copypage_64.o copyuser_64.o \
 | ||||
| 			   memcpy_64.o usercopy_64.o mem_64.o string.o \
 | ||||
| 			   strcase.o | ||||
| 			   memcpy_64.o usercopy_64.o mem_64.o string.o | ||||
| obj-$(CONFIG_QUICC_ENGINE) += rheap.o | ||||
| obj-$(CONFIG_XMON)	+= sstep.o | ||||
| obj-$(CONFIG_KPROBES)	+= sstep.o | ||||
|  |  | |||
|  | @ -1,25 +0,0 @@ | |||
| #include <linux/types.h> | ||||
| #include <linux/ctype.h> | ||||
| #include <linux/string.h> | ||||
| 
 | ||||
| int strcasecmp(const char *s1, const char *s2) | ||||
| { | ||||
| 	int c1, c2; | ||||
| 
 | ||||
| 	do { | ||||
| 		c1 = tolower(*s1++); | ||||
| 		c2 = tolower(*s2++); | ||||
| 	} while (c1 == c2 && c1 != 0); | ||||
| 	return c1 - c2; | ||||
| } | ||||
| 
 | ||||
| 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; | ||||
| } | ||||
|  | @ -93,8 +93,6 @@ EXPORT_SYMBOL(strncpy); | |||
| EXPORT_SYMBOL(strcat); | ||||
| EXPORT_SYMBOL(strlen); | ||||
| EXPORT_SYMBOL(strcmp); | ||||
| EXPORT_SYMBOL(strcasecmp); | ||||
| EXPORT_SYMBOL(strncasecmp); | ||||
| EXPORT_SYMBOL(__div64_32); | ||||
| 
 | ||||
| EXPORT_SYMBOL(csum_partial); | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| # Makefile for ppc-specific library files..
 | ||||
| #
 | ||||
| 
 | ||||
| obj-y			:= checksum.o string.o strcase.o div64.o | ||||
| obj-y			:= checksum.o string.o div64.o | ||||
| 
 | ||||
| obj-$(CONFIG_8xx)	+= rheap.o | ||||
| obj-$(CONFIG_CPM2)	+= rheap.o | ||||
|  |  | |||
|  | @ -1,24 +0,0 @@ | |||
| #include <linux/ctype.h> | ||||
| #include <linux/types.h> | ||||
| 
 | ||||
| int strcasecmp(const char *s1, const char *s2) | ||||
| { | ||||
| 	int c1, c2; | ||||
| 
 | ||||
| 	do { | ||||
| 		c1 = tolower(*s1++); | ||||
| 		c2 = tolower(*s2++); | ||||
| 	} while (c1 == c2 && c1 != 0); | ||||
| 	return c1 - c2; | ||||
| } | ||||
| 
 | ||||
| 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; | ||||
| } | ||||
|  | @ -3,7 +3,7 @@ | |||
| #
 | ||||
| 
 | ||||
| lib-y  = delay.o memset.o memmove.o memchr.o \
 | ||||
| 	 checksum.o strcasecmp.o strlen.o div64.o udivdi3.o \
 | ||||
| 	 checksum.o strlen.o div64.o udivdi3.o \
 | ||||
| 	 div64-generic.o | ||||
| 
 | ||||
| memcpy-y			:= memcpy.o | ||||
|  |  | |||
|  | @ -1,26 +0,0 @@ | |||
| /*
 | ||||
|  *  linux/arch/alpha/lib/strcasecmp.c | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/string.h> | ||||
| 
 | ||||
| 
 | ||||
| /* We handle nothing here except the C locale.  Since this is used in
 | ||||
|    only one place, on strings known to contain only 7 bit ASCII, this | ||||
|    is ok.  */ | ||||
| 
 | ||||
| int strcasecmp(const char *a, const char *b) | ||||
| { | ||||
| 	int ca, cb; | ||||
| 
 | ||||
| 	do { | ||||
| 		ca = *a++ & 0xff; | ||||
| 		cb = *b++ & 0xff; | ||||
| 		if (ca >= 'A' && ca <= 'Z') | ||||
| 			ca += 'a' - 'A'; | ||||
| 		if (cb >= 'A' && cb <= 'Z') | ||||
| 			cb += 'a' - 'A'; | ||||
| 	} while (ca == cb && ca != '\0'); | ||||
| 
 | ||||
| 	return ca - cb; | ||||
| } | ||||
|  | @ -2,6 +2,6 @@ | |||
| # Makefile for Xtensa-specific library files.
 | ||||
| #
 | ||||
| 
 | ||||
| lib-y	+= memcopy.o memset.o checksum.o strcasecmp.o \
 | ||||
| lib-y	+= memcopy.o memset.o checksum.o \
 | ||||
| 	   usercopy.o strncpy_user.o strnlen_user.o | ||||
| lib-$(CONFIG_PCI) += pci-auto.o | ||||
|  |  | |||
|  | @ -1,32 +0,0 @@ | |||
| /*
 | ||||
|  *  linux/arch/xtensa/lib/strcasecmp.c | ||||
|  * | ||||
|  *  This file is subject to the terms and conditions of the GNU General | ||||
|  *  Public License.  See the file "COPYING" in the main directory of | ||||
|  *  this archive for more details. | ||||
|  * | ||||
|  *  Copyright (C) 2002 Tensilica Inc. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/string.h> | ||||
| 
 | ||||
| 
 | ||||
| /* We handle nothing here except the C locale.  Since this is used in
 | ||||
|    only one place, on strings known to contain only 7 bit ASCII, this | ||||
|    is ok.  */ | ||||
| 
 | ||||
| int strcasecmp(const char *a, const char *b) | ||||
| { | ||||
| 	int ca, cb; | ||||
| 
 | ||||
| 	do { | ||||
| 		ca = *a++ & 0xff; | ||||
| 		cb = *b++ & 0xff; | ||||
| 		if (ca >= 'A' && ca <= 'Z') | ||||
| 			ca += 'a' - 'A'; | ||||
| 		if (cb >= 'A' && cb <= 'Z') | ||||
| 			cb += 'a' - 'A'; | ||||
| 	} while (ca == cb && ca != '\0'); | ||||
| 
 | ||||
| 	return ca - cb; | ||||
| } | ||||
|  | @ -61,8 +61,6 @@ extern void * __memsetw(void *dest, unsigned short, size_t count); | |||
|  ? __constant_c_memset((s),0x0001000100010001UL*(unsigned short)(c),(n)) \ | ||||
|  : __memsetw((s),(c),(n))) | ||||
| 
 | ||||
| extern int strcasecmp(const char *, const char *); | ||||
| 
 | ||||
| #endif /* __KERNEL__ */ | ||||
| 
 | ||||
| #endif /* __ALPHA_STRING_H__ */ | ||||
|  |  | |||
|  | @ -14,8 +14,6 @@ | |||
| #define __HAVE_ARCH_MEMCMP | ||||
| #define __HAVE_ARCH_MEMCHR | ||||
| 
 | ||||
| extern int strcasecmp(const char *, const char *); | ||||
| extern int strncasecmp(const char *, const char *, __kernel_size_t); | ||||
| extern char * strcpy(char *,const char *); | ||||
| extern char * strncpy(char *,const char *, __kernel_size_t); | ||||
| extern __kernel_size_t strlen(const char *); | ||||
|  |  | |||
|  | @ -126,9 +126,6 @@ extern void *memchr(const void *__s, int __c, size_t __n); | |||
| #define __HAVE_ARCH_STRLEN | ||||
| extern size_t strlen(const char *); | ||||
| 
 | ||||
| /* arch/sh/lib/strcasecmp.c */ | ||||
| extern int strcasecmp(const char *, const char *); | ||||
| 
 | ||||
| #endif /* __KERNEL__ */ | ||||
| 
 | ||||
| #endif /* __ASM_SH_STRING_H */ | ||||
|  |  | |||
|  | @ -47,6 +47,12 @@ extern int strncmp(const char *,const char *,__kernel_size_t); | |||
| #ifndef __HAVE_ARCH_STRNICMP | ||||
| extern int strnicmp(const char *, const char *, __kernel_size_t); | ||||
| #endif | ||||
| #ifndef __HAVE_ARCH_STRCASECMP | ||||
| extern int strcasecmp(const char *s1, const char *s2); | ||||
| #endif | ||||
| #ifndef __HAVE_ARCH_STRNCASECMP | ||||
| extern int strncasecmp(const char *s1, const char *s2, size_t n); | ||||
| #endif | ||||
| #ifndef __HAVE_ARCH_STRCHR | ||||
| extern char * strchr(const char *,int); | ||||
| #endif | ||||
|  |  | |||
							
								
								
									
										28
									
								
								lib/string.c
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								lib/string.c
									
										
									
									
									
								
							|  | @ -60,6 +60,34 @@ int strnicmp(const char *s1, const char *s2, size_t len) | |||
| EXPORT_SYMBOL(strnicmp); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef __HAVE_ARCH_STRCASECMP | ||||
| int strcasecmp(const char *s1, const char *s2) | ||||
| { | ||||
| 	int c1, c2; | ||||
| 
 | ||||
| 	do { | ||||
| 		c1 = tolower(*s1++); | ||||
| 		c2 = tolower(*s2++); | ||||
| 	} while (c1 == c2 && c1 != 0); | ||||
| 	return c1 - c2; | ||||
| } | ||||
| 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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David S. Miller
				David S. Miller