1 // Copyright 2016 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <string.h>
6 
7 #include <stdint.h>
8 
memset(void * _dst,int c,size_t n)9 void* memset(void* _dst, int c, size_t n) {
10     uint8_t* dst = _dst;
11     while (n-- > 0) {
12         *dst++ = c;
13     }
14     return _dst;
15 }
16 
memcpy(void * _dst,const void * _src,size_t n)17 void* memcpy(void* _dst, const void* _src, size_t n) {
18     uint8_t* dst = _dst;
19     const uint8_t* src = _src;
20     while (n-- > 0) {
21         *dst++ = *src++;
22     }
23     return _dst;
24 }
25 
memcmp(const void * _a,const void * _b,size_t n)26 int memcmp(const void* _a, const void* _b, size_t n) {
27     const uint8_t* a = _a;
28     const uint8_t* b = _b;
29     while (n-- > 0) {
30         int x = *a++ - *b++;
31         if (x != 0) {
32             return x;
33         }
34     }
35     return 0;
36 }
37 
strlen(const char * s)38 size_t strlen(const char* s) {
39     size_t len = 0;
40     while (*s++)
41         len++;
42     return len;
43 }
44 
strnlen(const char * s,size_t max)45 size_t strnlen(const char* s, size_t max) {
46     size_t len = 0;
47     while (len < max && *s++)
48         len++;
49     return len;
50 }
51 
strchr(const char * s,int c)52 char* strchr(const char* s, int c) {
53     while (*s != c && *s++) ;
54     if (*s != c) return 0;
55     return (char*)s;
56 }
57 
strcpy(char * dst,const char * src)58 char* strcpy(char* dst, const char* src) {
59     while (*src != 0) {
60         *dst++ = *src++;
61     }
62     return dst;
63 }
64 
strncpy(char * dst,const char * src,size_t len)65 char* strncpy(char* dst, const char* src, size_t len) {
66     while (len-- > 0 && *src != 0) {
67         *dst++ = *src++;
68     }
69     return dst;
70 }
71 
strcmp(const char * s1,const char * s2)72 int strcmp(const char* s1, const char* s2) {
73     while (*s1 && (*s1 == *s2)) {
74         s1++;
75         s2++;
76     }
77     return *s1 - *s2;
78 }
79 
strncmp(const char * s1,const char * s2,size_t len)80 int strncmp(const char* s1, const char* s2, size_t len) {
81     while (len-- > 0) {
82         int diff = *s1 - *s2;
83         if (diff != 0 || *s1 == '\0') {
84             return diff;
85         }
86         s1++;
87         s2++;
88     }
89     return 0;
90 }
91