Changeset a46da63 in mainline for libc/generic/string.c
- Timestamp:
- 2006-06-16T20:50:51Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 153a209
- Parents:
- b34fab6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libc/generic/string.c
rb34fab6 ra46da63 27 27 */ 28 28 29 29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 42 42 /* Dummy implementation of mem/ functions */ 43 43 44 void * 44 void *memset(void *s, int c, size_t n) 45 45 { 46 46 char *os = s; 47 47 48 while (n--) 48 49 *(os++) = c; 50 49 51 return s; 50 52 } 51 53 52 struct along {unsigned long n; } __attribute__ ((packed)); 53 54 static void * unaligned_memcpy(void *dst, const void *src, size_t n) 54 struct along { 55 unsigned long n; 56 } __attribute__ ((packed)); 57 58 static void *unaligned_memcpy(void *dst, const void *src, size_t n) 55 59 { 56 60 int i, j; … … 58 62 const struct along *asrc = src; 59 63 60 for (i = 0; i < n /sizeof(unsigned long); i++)64 for (i = 0; i < n / sizeof(unsigned long); i++) 61 65 adst[i].n = asrc[i].n; 62 66 63 for (j = 0; j < n %sizeof(unsigned long); j++)64 ((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *)(((unsigned long *) src) + i))[j];65 66 return (char *) src;67 } 68 69 void * 67 for (j = 0; j < n % sizeof(unsigned long); j++) 68 ((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *) (((unsigned long *) src) + i))[j]; 69 70 return (char *) src; 71 } 72 73 void *memcpy(void *dst, const void *src, size_t n) 70 74 { 71 75 int i, j; 72 76 73 if (((long) dst & (sizeof(long)-1)) || ((long)src & (sizeof(long)-1)))77 if (((long) dst & (sizeof(long) - 1)) || ((long) src & (sizeof(long) - 1))) 74 78 return unaligned_memcpy(dst, src, n); 75 79 76 for (i = 0; i < n /sizeof(unsigned long); i++)80 for (i = 0; i < n / sizeof(unsigned long); i++) 77 81 ((unsigned long *) dst)[i] = ((unsigned long *) src)[i]; 78 82 79 for (j = 0; j < n %sizeof(unsigned long); j++)80 ((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *)(((unsigned long *) src) + i))[j];81 82 return (char *) src;83 } 84 85 void * 83 for (j = 0; j < n % sizeof(unsigned long); j++) 84 ((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *) (((unsigned long *) src) + i))[j]; 85 86 return (char *) src; 87 } 88 89 void *memmove(void *dst, const void *src, size_t n) 86 90 { 87 91 int i, j; … … 90 94 return memcpy(dst, src, n); 91 95 92 for (j = (n %sizeof(unsigned long))-1; j >= 0; j--)93 ((unsigned char *) (((unsigned long *) dst) + i))[j] = ((unsigned char *)(((unsigned long *) src) + i))[j];94 95 for (i = n /sizeof(unsigned long)-1; i >=0 ; i--)96 for (j = (n % sizeof(unsigned long)) - 1; j >= 0; j--) 97 ((unsigned char *) ((unsigned long *) dst))[j] = ((unsigned char *) ((unsigned long *) src))[j]; 98 99 for (i = n / sizeof(unsigned long) - 1; i >=0 ; i--) 96 100 ((unsigned long *) dst)[i] = ((unsigned long *) src)[i]; 97 101 98 return (char *) src;102 return (char *) src; 99 103 } 100 104 … … 108 112 size_t counter = 0; 109 113 110 while (str[counter] != 0) {114 while (str[counter] != 0) 111 115 counter++; 112 }113 116 114 117 return counter; 115 118 } 116 119 117 int strcmp(const char *a, const char *b)118 { 119 int c =0;120 121 while (a[c]&&b[c]&&(!(a[c]-b[c]))) c++;122 123 return a[c]-b[c];124 125 } 126 120 int strcmp(const char *a, const char *b) 121 { 122 int c = 0; 123 124 while (a[c] && b[c] && (!(a[c] - b[c]))) 125 c++; 126 127 return (a[c] - b[c]); 128 129 } 127 130 128 131 … … 135 138 { 136 139 while (*str != '\0') { 137 if (*str == (char) c)138 return (char *) str;140 if (*str == (char) c) 141 return (char *) str; 139 142 str++; 140 143 } … … 153 156 154 157 while (*str != '\0') { 155 if (*str == (char) c)156 retval = (char *) str;158 if (*str == (char) c) 159 retval = (char *) str; 157 160 str++; 158 161 } 159 162 160 return (char *) retval;163 return (char *) retval; 161 164 } 162 165 … … 210 213 while (*str) { 211 214 c = *str; 212 c = ( c >= 'a'? c-'a'+10:(c >= 'A'?c-'A'+10:(c <= '9'?c-'0':0xff)));215 c = (c >= 'a' ? c - 'a' + 10 : (c >= 'A' ? c - 'A' + 10 : (c <= '9' ? c - '0' : 0xff))); 213 216 if (c > base) { 214 217 break; … … 236 239 237 240 if (endptr) 238 *endptr = (char *) str;241 *endptr = (char *) str; 239 242 240 243 if (nptr == str) { … … 264 267 265 268 if (number > LONG_MAX) { 266 if ((sgn) && (number == (unsigned long) (LONG_MAX) + 1)) {269 if ((sgn) && (number == (unsigned long) (LONG_MAX) + 1)) { 267 270 /* FIXME: set 0 to errno */ 268 271 return number; 269 272 } 270 273 /* FIXME: set ERANGE to errno */ 271 return (sgn ?LONG_MIN:LONG_MAX);272 } 273 274 return (sgn ?-number:number);274 return (sgn ? LONG_MIN : LONG_MAX); 275 } 276 277 return (sgn ? -number : number); 275 278 } 276 279 … … 293 296 number = _strtoul(nptr, endptr, base, &sgn); 294 297 295 return (sgn ?-number:number);298 return (sgn ? -number : number); 296 299 } 297 300 298 301 char *strcpy(char *dest, const char *src) 299 302 { 300 while (*(dest++) = *(src++)) 301 ; 303 char *orig = dest; 304 305 while ((*(dest++) = *(src++))); 306 return orig; 302 307 } 303 308 304 309 char *strncpy(char *dest, const char *src, size_t n) 305 310 { 306 while ((*(dest++) = *(src++)) && --n)307 ;308 } 309 310 311 /** @} 312 */ 313 314 311 char *orig = dest; 312 313 while ((*(dest++) = *(src++)) && --n); 314 return orig; 315 } 316 317 318 /** @} 319 */
Note:
See TracChangeset
for help on using the changeset viewer.