[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)csum_ipv6_magic.o \
 | ||||||
| 	$(ev6-y)clear_page.o \
 | 	$(ev6-y)clear_page.o \
 | ||||||
| 	$(ev6-y)copy_page.o \
 | 	$(ev6-y)copy_page.o \
 | ||||||
| 	strcasecmp.o \
 |  | ||||||
| 	fpreg.o \
 | 	fpreg.o \
 | ||||||
| 	callback_srm.o srm_puts.o srm_printk.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(strcat); | ||||||
| EXPORT_SYMBOL(strlen); | EXPORT_SYMBOL(strlen); | ||||||
| EXPORT_SYMBOL(strcmp); | EXPORT_SYMBOL(strcmp); | ||||||
| EXPORT_SYMBOL(strcasecmp); |  | ||||||
| EXPORT_SYMBOL(strncasecmp); |  | ||||||
| 
 | 
 | ||||||
| EXPORT_SYMBOL(csum_partial); | EXPORT_SYMBOL(csum_partial); | ||||||
| EXPORT_SYMBOL(csum_partial_copy_generic); | EXPORT_SYMBOL(csum_partial_copy_generic); | ||||||
|  |  | ||||||
|  | @ -7,13 +7,12 @@ EXTRA_CFLAGS		+= -mno-minimal-toc | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| ifeq ($(CONFIG_PPC_MERGE),y) | 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 | obj-$(CONFIG_PPC32)	+= div64.o copy_32.o checksum_32.o | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| obj-$(CONFIG_PPC64)	+= checksum_64.o copypage_64.o copyuser_64.o \
 | obj-$(CONFIG_PPC64)	+= checksum_64.o copypage_64.o copyuser_64.o \
 | ||||||
| 			   memcpy_64.o usercopy_64.o mem_64.o string.o \
 | 			   memcpy_64.o usercopy_64.o mem_64.o string.o | ||||||
| 			   strcase.o |  | ||||||
| obj-$(CONFIG_QUICC_ENGINE) += rheap.o | obj-$(CONFIG_QUICC_ENGINE) += rheap.o | ||||||
| obj-$(CONFIG_XMON)	+= sstep.o | obj-$(CONFIG_XMON)	+= sstep.o | ||||||
| obj-$(CONFIG_KPROBES)	+= 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(strcat); | ||||||
| EXPORT_SYMBOL(strlen); | EXPORT_SYMBOL(strlen); | ||||||
| EXPORT_SYMBOL(strcmp); | EXPORT_SYMBOL(strcmp); | ||||||
| EXPORT_SYMBOL(strcasecmp); |  | ||||||
| EXPORT_SYMBOL(strncasecmp); |  | ||||||
| EXPORT_SYMBOL(__div64_32); | EXPORT_SYMBOL(__div64_32); | ||||||
| 
 | 
 | ||||||
| EXPORT_SYMBOL(csum_partial); | EXPORT_SYMBOL(csum_partial); | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| # Makefile for ppc-specific library files..
 | # 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_8xx)	+= rheap.o | ||||||
| obj-$(CONFIG_CPM2)	+= 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 \
 | 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 | 	 div64-generic.o | ||||||
| 
 | 
 | ||||||
| memcpy-y			:= memcpy.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.
 | # 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 | 	   usercopy.o strncpy_user.o strnlen_user.o | ||||||
| lib-$(CONFIG_PCI) += pci-auto.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)) \ |  ? __constant_c_memset((s),0x0001000100010001UL*(unsigned short)(c),(n)) \ | ||||||
|  : __memsetw((s),(c),(n))) |  : __memsetw((s),(c),(n))) | ||||||
| 
 | 
 | ||||||
| extern int strcasecmp(const char *, const char *); |  | ||||||
| 
 |  | ||||||
| #endif /* __KERNEL__ */ | #endif /* __KERNEL__ */ | ||||||
| 
 | 
 | ||||||
| #endif /* __ALPHA_STRING_H__ */ | #endif /* __ALPHA_STRING_H__ */ | ||||||
|  |  | ||||||
|  | @ -14,8 +14,6 @@ | ||||||
| #define __HAVE_ARCH_MEMCMP | #define __HAVE_ARCH_MEMCMP | ||||||
| #define __HAVE_ARCH_MEMCHR | #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 * strcpy(char *,const char *); | ||||||
| extern char * strncpy(char *,const char *, __kernel_size_t); | extern char * strncpy(char *,const char *, __kernel_size_t); | ||||||
| extern __kernel_size_t strlen(const char *); | 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 | #define __HAVE_ARCH_STRLEN | ||||||
| extern size_t strlen(const char *); | extern size_t strlen(const char *); | ||||||
| 
 | 
 | ||||||
| /* arch/sh/lib/strcasecmp.c */ |  | ||||||
| extern int strcasecmp(const char *, const char *); |  | ||||||
| 
 |  | ||||||
| #endif /* __KERNEL__ */ | #endif /* __KERNEL__ */ | ||||||
| 
 | 
 | ||||||
| #endif /* __ASM_SH_STRING_H */ | #endif /* __ASM_SH_STRING_H */ | ||||||
|  |  | ||||||
|  | @ -47,6 +47,12 @@ extern int strncmp(const char *,const char *,__kernel_size_t); | ||||||
| #ifndef __HAVE_ARCH_STRNICMP | #ifndef __HAVE_ARCH_STRNICMP | ||||||
| extern int strnicmp(const char *, const char *, __kernel_size_t); | extern int strnicmp(const char *, const char *, __kernel_size_t); | ||||||
| #endif | #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 | #ifndef __HAVE_ARCH_STRCHR | ||||||
| extern char * strchr(const char *,int); | extern char * strchr(const char *,int); | ||||||
| #endif | #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); | EXPORT_SYMBOL(strnicmp); | ||||||
| #endif | #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 | #ifndef __HAVE_ARCH_STRCPY | ||||||
| /**
 | /**
 | ||||||
|  * strcpy - Copy a %NUL terminated string |  * strcpy - Copy a %NUL terminated string | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David S. Miller
				David S. Miller