|  | #ifndef __ASM_ARM_STRING_H | 
|  | #define __ASM_ARM_STRING_H | 
|  |  | 
|  | /* | 
|  | * We don't do inline string functions, since the | 
|  | * optimised inline asm versions are not small. | 
|  | */ | 
|  |  | 
|  | #define __HAVE_ARCH_STRRCHR | 
|  | extern char * strrchr(const char * s, int c); | 
|  |  | 
|  | #define __HAVE_ARCH_STRCHR | 
|  | extern char * strchr(const char * s, int c); | 
|  |  | 
|  | #define __HAVE_ARCH_MEMCPY | 
|  | extern void * memcpy(void *, const void *, __kernel_size_t); | 
|  |  | 
|  | #define __HAVE_ARCH_MEMMOVE | 
|  | extern void * memmove(void *, const void *, __kernel_size_t); | 
|  |  | 
|  | #define __HAVE_ARCH_MEMCHR | 
|  | extern void * memchr(const void *, int, __kernel_size_t); | 
|  |  | 
|  | #define __HAVE_ARCH_MEMZERO | 
|  | #define __HAVE_ARCH_MEMSET | 
|  | extern void * memset(void *, int, __kernel_size_t); | 
|  |  | 
|  | extern void __memzero(void *ptr, __kernel_size_t n); | 
|  |  | 
|  | #define memset(p,v,n)							\ | 
|  | ({								\ | 
|  | if ((n) != 0) {						\ | 
|  | if (__builtin_constant_p((v)) && (v) == 0)	\ | 
|  | __memzero((p),(n));			\ | 
|  | else						\ | 
|  | memset((p),(v),(n));			\ | 
|  | }							\ | 
|  | (p);							\ | 
|  | }) | 
|  |  | 
|  | #define memzero(p,n) ({ if ((n) != 0) __memzero((p),(n)); (p); }) | 
|  |  | 
|  | #endif |