megadrive_test1
annotate src/libc/string.c @ 6:862f8a034cae
expanding the megadrive code
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sat, 11 Feb 2017 08:56:42 +0200 |
parents | |
children |
rev | line source |
---|---|
nuclear@6 | 1 #include <string.h> |
nuclear@6 | 2 |
nuclear@6 | 3 void *memset(void *s, int c, size_t n) |
nuclear@6 | 4 { |
nuclear@6 | 5 char *ptr = s; |
nuclear@6 | 6 while(n--) { |
nuclear@6 | 7 *ptr++ = c; |
nuclear@6 | 8 } |
nuclear@6 | 9 return s; |
nuclear@6 | 10 } |
nuclear@6 | 11 |
nuclear@6 | 12 void *memcpy(void *dest, const void *src, size_t n) |
nuclear@6 | 13 { |
nuclear@6 | 14 char *dptr = dest; |
nuclear@6 | 15 const char *sptr = src; |
nuclear@6 | 16 |
nuclear@6 | 17 while(n--) { |
nuclear@6 | 18 *dptr++ = *sptr++; |
nuclear@6 | 19 } |
nuclear@6 | 20 return dest; |
nuclear@6 | 21 } |
nuclear@6 | 22 |
nuclear@6 | 23 void *memmove(void *dest, const void *src, size_t n) |
nuclear@6 | 24 { |
nuclear@6 | 25 int i; |
nuclear@6 | 26 char *dptr; |
nuclear@6 | 27 const char *sptr; |
nuclear@6 | 28 |
nuclear@6 | 29 if(dest <= src) { |
nuclear@6 | 30 /* forward copy */ |
nuclear@6 | 31 dptr = dest; |
nuclear@6 | 32 sptr = src; |
nuclear@6 | 33 for(i=0; i<n; i++) { |
nuclear@6 | 34 *dptr++ = *sptr++; |
nuclear@6 | 35 } |
nuclear@6 | 36 } else { |
nuclear@6 | 37 /* backwards copy */ |
nuclear@6 | 38 dptr = (char*)dest + n - 1; |
nuclear@6 | 39 sptr = (char*)src + n - 1; |
nuclear@6 | 40 for(i=0; i<n; i++) { |
nuclear@6 | 41 *dptr-- = *sptr--; |
nuclear@6 | 42 } |
nuclear@6 | 43 } |
nuclear@6 | 44 |
nuclear@6 | 45 return dest; |
nuclear@6 | 46 } |
nuclear@6 | 47 |
nuclear@6 | 48 size_t strlen(const char *s) |
nuclear@6 | 49 { |
nuclear@6 | 50 size_t len = 0; |
nuclear@6 | 51 while(*s++) len++; |
nuclear@6 | 52 return len; |
nuclear@6 | 53 } |
nuclear@6 | 54 |
nuclear@6 | 55 char *strchr(const char *s, int c) |
nuclear@6 | 56 { |
nuclear@6 | 57 while(*s) { |
nuclear@6 | 58 if(*s == c) { |
nuclear@6 | 59 return (char*)s; |
nuclear@6 | 60 } |
nuclear@6 | 61 s++; |
nuclear@6 | 62 } |
nuclear@6 | 63 return 0; |
nuclear@6 | 64 } |
nuclear@6 | 65 |
nuclear@6 | 66 char *strrchr(const char *s, int c) |
nuclear@6 | 67 { |
nuclear@6 | 68 const char *ptr = s; |
nuclear@6 | 69 |
nuclear@6 | 70 /* find the end */ |
nuclear@6 | 71 while(*ptr) ptr++; |
nuclear@6 | 72 |
nuclear@6 | 73 /* go back checking for c */ |
nuclear@6 | 74 while(--ptr >= s) { |
nuclear@6 | 75 if(*ptr == c) { |
nuclear@6 | 76 return (char*)ptr; |
nuclear@6 | 77 } |
nuclear@6 | 78 } |
nuclear@6 | 79 return 0; |
nuclear@6 | 80 } |
nuclear@6 | 81 |
nuclear@6 | 82 char *strstr(const char *str, const char *substr) |
nuclear@6 | 83 { |
nuclear@6 | 84 while(*str) { |
nuclear@6 | 85 const char *s1 = str; |
nuclear@6 | 86 const char *s2 = substr; |
nuclear@6 | 87 |
nuclear@6 | 88 while(*s1 && *s1 == *s2) { |
nuclear@6 | 89 s1++; |
nuclear@6 | 90 s2++; |
nuclear@6 | 91 } |
nuclear@6 | 92 if(!*s2) { |
nuclear@6 | 93 return (char*)str; |
nuclear@6 | 94 } |
nuclear@6 | 95 str++; |
nuclear@6 | 96 } |
nuclear@6 | 97 return 0; |
nuclear@6 | 98 } |
nuclear@6 | 99 |
nuclear@6 | 100 int strcmp(const char *s1, const char *s2) |
nuclear@6 | 101 { |
nuclear@6 | 102 while(*s1 && *s1 == *s2) { |
nuclear@6 | 103 s1++; |
nuclear@6 | 104 s2++; |
nuclear@6 | 105 } |
nuclear@6 | 106 return *s1 - *s2; |
nuclear@6 | 107 } |