kern

view src/klibc/string.c @ 80:4db99a52863e

fixed the "endianess" of the text messages in the ATA identify info block. this is the first time I've seen wrong byteorder in ascii text, the ATA committee should be commended.
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 06 Dec 2011 13:35:39 +0200
parents af6f4adc43d6
children f83f50c17c3b
line source
1 #include <string.h>
3 void memset(void *s, int c, size_t n)
4 {
5 char *ptr = s;
6 while(n--) {
7 *ptr++ = c;
8 }
9 }
11 /* Does the same thing as memset only with 16bit values.
12 * n in this case is the number of values, not the number of bytes.
13 */
14 void memset16(void *s, int c, size_t n)
15 {
16 short *ptr = s;
17 while(n--) {
18 *ptr++ = c;
19 }
20 }
22 void *memcpy(void *dest, const void *src, size_t n)
23 {
24 char *dptr = dest;
25 const char *sptr = src;
27 while(n--) {
28 *dptr++ = *sptr++;
29 }
30 return dest;
31 }
33 void *memmove(void *dest, const void *src, size_t n)
34 {
35 int i;
36 char *dptr;
37 const char *sptr;
39 if(dest <= src) {
40 /* forward copy */
41 dptr = dest;
42 sptr = src;
43 for(i=0; i<n; i++) {
44 *dptr++ = *sptr++;
45 }
46 } else {
47 /* backwards copy */
48 dptr = dest + n - 1;
49 sptr = src + n - 1;
50 for(i=0; i<n; i++) {
51 *dptr-- = *sptr--;
52 }
53 }
55 return dest;
56 }
58 size_t strlen(const char *s)
59 {
60 size_t len = 0;
61 while(*s++) len++;
62 return len;
63 }
65 char *strchr(const char *s, int c)
66 {
67 while(*s) {
68 if(*s == c) {
69 return (char*)s;
70 }
71 s++;
72 }
73 return 0;
74 }
76 char *strrchr(const char *s, int c)
77 {
78 const char *ptr = s;
80 /* find the end */
81 while(*ptr) ptr++;
83 /* go back checking for c */
84 while(--ptr >= s) {
85 if(*ptr == c) {
86 return (char*)ptr;
87 }
88 }
89 return 0;
90 }
92 int strcmp(const char *s1, const char *s2)
93 {
94 while(*s1 && *s1 == *s2) {
95 s1++;
96 s2++;
97 }
98 return *s1 - *s2;
99 }