128 lines
		
	
	
	
		
			1.8 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			128 lines
		
	
	
	
		
			1.8 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * arch/arm/boot/compressed/string.c
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Small subset of simple string routines
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <linux/string.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void *memcpy(void *__dest, __const void *__src, size_t __n)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									int i = 0;
							 | 
						||
| 
								 | 
							
									unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for (i = __n >> 3; i > 0; i--) {
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (__n & 1 << 2) {
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (__n & 1 << 1) {
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (__n & 1)
							 | 
						||
| 
								 | 
							
										*d++ = *s++;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return __dest;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void *memmove(void *__dest, __const void *__src, size_t count)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									unsigned char *d = __dest;
							 | 
						||
| 
								 | 
							
									const unsigned char *s = __src;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (__dest == __src)
							 | 
						||
| 
								 | 
							
										return __dest;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (__dest < __src)
							 | 
						||
| 
								 | 
							
										return memcpy(__dest, __src, count);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									while (count--)
							 | 
						||
| 
								 | 
							
										d[count] = s[count];
							 | 
						||
| 
								 | 
							
									return __dest;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								size_t strlen(const char *s)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									const char *sc = s;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									while (*sc != '\0')
							 | 
						||
| 
								 | 
							
										sc++;
							 | 
						||
| 
								 | 
							
									return sc - s;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int memcmp(const void *cs, const void *ct, size_t count)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									const unsigned char *su1 = cs, *su2 = ct, *end = su1 + count;
							 | 
						||
| 
								 | 
							
									int res = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									while (su1 < end) {
							 | 
						||
| 
								 | 
							
										res = *su1++ - *su2++;
							 | 
						||
| 
								 | 
							
										if (res)
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return res;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int strcmp(const char *cs, const char *ct)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									unsigned char c1, c2;
							 | 
						||
| 
								 | 
							
									int res = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									do {
							 | 
						||
| 
								 | 
							
										c1 = *cs++;
							 | 
						||
| 
								 | 
							
										c2 = *ct++;
							 | 
						||
| 
								 | 
							
										res = c1 - c2;
							 | 
						||
| 
								 | 
							
										if (res)
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
									} while (c1);
							 | 
						||
| 
								 | 
							
									return res;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void *memchr(const void *s, int c, size_t count)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									const unsigned char *p = s;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									while (count--)
							 | 
						||
| 
								 | 
							
										if ((unsigned char)c == *p++)
							 | 
						||
| 
								 | 
							
											return (void *)(p - 1);
							 | 
						||
| 
								 | 
							
									return NULL;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								char *strchr(const char *s, int c)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									while (*s != (char)c)
							 | 
						||
| 
								 | 
							
										if (*s++ == '\0')
							 | 
						||
| 
								 | 
							
											return NULL;
							 | 
						||
| 
								 | 
							
									return (char *)s;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#undef memset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void *memset(void *s, int c, size_t count)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									char *xs = s;
							 | 
						||
| 
								 | 
							
									while (count--)
							 | 
						||
| 
								 | 
							
										*xs++ = c;
							 | 
						||
| 
								 | 
							
									return s;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void __memzero(void *s, size_t count)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									memset(s, 0, count);
							 | 
						||
| 
								 | 
							
								}
							 |