strcpy
[retrocrawl] / src / amiga / libc / string.c
1 #include <string.h>
2 #include <ctype.h>
3
4 void memset(void *s, int c, size_t n)
5 {
6         char *ptr = s;
7         while(n--) {
8                 *ptr++ = c;
9         }
10 }
11
12 void *memcpy(void *dest, const void *src, size_t n)
13 {
14         char *dptr = dest;
15         const char *sptr = src;
16
17         while(n--) {
18                 *dptr++ = *sptr++;
19         }
20         return dest;
21 }
22
23 void *memmove(void *dest, const void *src, size_t n)
24 {
25         int i;
26         char *dptr;
27         const char *sptr;
28
29         if(dest <= src) {
30                 /* forward copy */
31                 dptr = dest;
32                 sptr = src;
33                 for(i=0; i<n; i++) {
34                         *dptr++ = *sptr++;
35                 }
36         } else {
37                 /* backwards copy */
38                 dptr = (char*)dest + n - 1;
39                 sptr = (char*)src + n - 1;
40                 for(i=0; i<n; i++) {
41                         *dptr-- = *sptr--;
42                 }
43         }
44
45         return dest;
46 }
47
48 char *strcpy(char *dest, const char *src)
49 {
50         char *res = dest;
51         while((*dest++ = *src++) != 0);
52         return res;
53 }
54
55 size_t strlen(const char *s)
56 {
57         size_t len = 0;
58         while(*s++) len++;
59         return len;
60 }
61
62 char *strchr(const char *s, int c)
63 {
64         while(*s) {
65                 if(*s == c) {
66                         return (char*)s;
67                 }
68                 s++;
69         }
70         return 0;
71 }
72
73 char *strrchr(const char *s, int c)
74 {
75         const char *ptr = s;
76
77         /* find the end */
78         while(*ptr) ptr++;
79
80         /* go back checking for c */
81         while(--ptr >= s) {
82                 if(*ptr == c) {
83                         return (char*)ptr;
84                 }
85         }
86         return 0;
87 }
88
89 char *strstr(const char *str, const char *substr)
90 {
91         while(*str) {
92                 const char *s1 = str;
93                 const char *s2 = substr;
94
95                 while(*s1 && *s1 == *s2) {
96                         s1++;
97                         s2++;
98                 }
99                 if(!*s2) {
100                         return (char*)str;
101                 }
102                 str++;
103         }
104         return 0;
105 }
106
107 int strcmp(const char *s1, const char *s2)
108 {
109         while(*s1 && *s1 == *s2) {
110                 s1++;
111                 s2++;
112         }
113         return *s1 - *s2;
114 }
115
116 int strcasecmp(const char *s1, const char *s2)
117 {
118         while(*s1 && tolower(*s1) == tolower(*s2)) {
119                 s1++;
120                 s2++;
121         }
122         return tolower(*s1) - tolower(*s2);
123 }