xref: /kvm-unit-tests/lib/string.c (revision a322d4c597bb7a4de7985e7b51b80504f7e4fdda)
1 #include "libcflat.h"
2 
3 unsigned long strlen(const char *buf)
4 {
5     unsigned long len = 0;
6 
7     while (*buf++)
8 	++len;
9     return len;
10 }
11 
12 char *strcat(char *dest, const char *src)
13 {
14     char *p = dest;
15 
16     while (*p)
17 	++p;
18     while ((*p++ = *src++) != 0)
19 	;
20     return dest;
21 }
22 
23 char *strcpy(char *dest, const char *src)
24 {
25     *dest = 0;
26     return strcat(dest, src);
27 }
28 
29 int strcmp(const char *a, const char *b)
30 {
31     while (*a == *b) {
32 	if (*a == '\0') {
33 	    break;
34 	}
35 	++a, ++b;
36     }
37     return *a - *b;
38 }
39 
40 char *strchr(const char *s, int c)
41 {
42     while (*s != (char)c)
43 	if (*s++ == '\0')
44 	    return NULL;
45     return (char *)s;
46 }
47 
48 void *memset(void *s, int c, size_t n)
49 {
50     size_t i;
51     char *a = s;
52 
53     for (i = 0; i < n; ++i)
54         a[i] = c;
55 
56     return s;
57 }
58 
59 void *memcpy(void *dest, const void *src, size_t n)
60 {
61     size_t i;
62     char *a = dest;
63     const char *b = src;
64 
65     for (i = 0; i < n; ++i)
66         a[i] = b[i];
67 
68     return dest;
69 }
70 
71 int memcmp(const void *s1, const void *s2, size_t n)
72 {
73     const unsigned char *a = s1, *b = s2;
74     int ret = 0;
75 
76     while (n--) {
77 	ret = *a - *b;
78 	if (ret)
79 	    break;
80 	++a, ++b;
81     }
82     return ret;
83 }
84 
85 void *memmove(void *dest, const void *src, size_t n)
86 {
87     const unsigned char *s = src;
88     unsigned char *d = dest;
89 
90     if (d <= s) {
91 	while (n--)
92 	    *d++ = *s++;
93     } else {
94 	d += n, s += n;
95 	while (n--)
96 	    *--d = *--s;
97     }
98     return dest;
99 }
100 
101 void *memchr(const void *s, int c, size_t n)
102 {
103     const unsigned char *str = s, chr = (unsigned char)c;
104 
105     while (n--)
106 	if (*str++ == chr)
107 	    return (void *)(str - 1);
108     return NULL;
109 }
110 
111 long atol(const char *ptr)
112 {
113     long acc = 0;
114     const char *s = ptr;
115     int neg, c;
116 
117     while (*s == ' ' || *s == '\t')
118         s++;
119     if (*s == '-'){
120         neg = 1;
121         s++;
122     } else {
123         neg = 0;
124         if (*s == '+')
125             s++;
126     }
127 
128     while (*s) {
129         if (*s < '0' || *s > '9')
130             break;
131         c = *s - '0';
132         acc = acc * 10 + c;
133         s++;
134     }
135 
136     if (neg)
137         acc = -acc;
138 
139     return acc;
140 }
141