17d36db35SAvi Kivity #include "libcflat.h" 27d36db35SAvi Kivity 37d36db35SAvi Kivity unsigned long strlen(const char *buf) 47d36db35SAvi Kivity { 57d36db35SAvi Kivity unsigned long len = 0; 67d36db35SAvi Kivity 77d36db35SAvi Kivity while (*buf++) 87d36db35SAvi Kivity ++len; 97d36db35SAvi Kivity return len; 107d36db35SAvi Kivity } 117d36db35SAvi Kivity 127d36db35SAvi Kivity char *strcat(char *dest, const char *src) 137d36db35SAvi Kivity { 147d36db35SAvi Kivity char *p = dest; 157d36db35SAvi Kivity 167d36db35SAvi Kivity while (*p) 177d36db35SAvi Kivity ++p; 187d36db35SAvi Kivity while ((*p++ = *src++) != 0) 197d36db35SAvi Kivity ; 207d36db35SAvi Kivity return dest; 217d36db35SAvi Kivity } 227d36db35SAvi Kivity 23782ebe33SAndrew Jones char *strcpy(char *dest, const char *src) 24782ebe33SAndrew Jones { 25782ebe33SAndrew Jones *dest = 0; 26782ebe33SAndrew Jones return strcat(dest, src); 27782ebe33SAndrew Jones } 28782ebe33SAndrew Jones 294fd53297SRadim Krčmář int strncmp(const char *a, const char *b, size_t n) 304fd53297SRadim Krčmář { 314fd53297SRadim Krčmář for (; n--; ++a, ++b) 324fd53297SRadim Krčmář if (*a != *b || *a == '\0') 334fd53297SRadim Krčmář return *a - *b; 344fd53297SRadim Krčmář 354fd53297SRadim Krčmář return 0; 364fd53297SRadim Krčmář } 374fd53297SRadim Krčmář 3869da6c87SAvi Kivity int strcmp(const char *a, const char *b) 3969da6c87SAvi Kivity { 404fd53297SRadim Krčmář return strncmp(a, b, SIZE_MAX); 4169da6c87SAvi Kivity } 4269da6c87SAvi Kivity 43782ebe33SAndrew Jones char *strchr(const char *s, int c) 44782ebe33SAndrew Jones { 45782ebe33SAndrew Jones while (*s != (char)c) 46782ebe33SAndrew Jones if (*s++ == '\0') 47782ebe33SAndrew Jones return NULL; 48782ebe33SAndrew Jones return (char *)s; 49782ebe33SAndrew Jones } 50782ebe33SAndrew Jones 5153da5cc0SAndrew Jones char *strstr(const char *s1, const char *s2) 5253da5cc0SAndrew Jones { 5353da5cc0SAndrew Jones size_t l1, l2; 5453da5cc0SAndrew Jones 5553da5cc0SAndrew Jones l2 = strlen(s2); 5653da5cc0SAndrew Jones if (!l2) 5753da5cc0SAndrew Jones return (char *)s1; 5853da5cc0SAndrew Jones l1 = strlen(s1); 5953da5cc0SAndrew Jones while (l1 >= l2) { 6053da5cc0SAndrew Jones l1--; 6153da5cc0SAndrew Jones if (!memcmp(s1, s2, l2)) 6253da5cc0SAndrew Jones return (char *)s1; 6353da5cc0SAndrew Jones s1++; 6453da5cc0SAndrew Jones } 6553da5cc0SAndrew Jones return NULL; 6653da5cc0SAndrew Jones } 6753da5cc0SAndrew Jones 687d36db35SAvi Kivity void *memset(void *s, int c, size_t n) 697d36db35SAvi Kivity { 707d36db35SAvi Kivity size_t i; 717d36db35SAvi Kivity char *a = s; 727d36db35SAvi Kivity 737d36db35SAvi Kivity for (i = 0; i < n; ++i) 747d36db35SAvi Kivity a[i] = c; 757d36db35SAvi Kivity 767d36db35SAvi Kivity return s; 777d36db35SAvi Kivity } 781b708e8cSJason Wang 798d68030eSArthur Chunqi Li void *memcpy(void *dest, const void *src, size_t n) 808d68030eSArthur Chunqi Li { 818d68030eSArthur Chunqi Li size_t i; 828d68030eSArthur Chunqi Li char *a = dest; 838d68030eSArthur Chunqi Li const char *b = src; 848d68030eSArthur Chunqi Li 858d68030eSArthur Chunqi Li for (i = 0; i < n; ++i) 868d68030eSArthur Chunqi Li a[i] = b[i]; 878d68030eSArthur Chunqi Li 888d68030eSArthur Chunqi Li return dest; 898d68030eSArthur Chunqi Li } 908d68030eSArthur Chunqi Li 91782ebe33SAndrew Jones int memcmp(const void *s1, const void *s2, size_t n) 92782ebe33SAndrew Jones { 93782ebe33SAndrew Jones const unsigned char *a = s1, *b = s2; 94782ebe33SAndrew Jones int ret = 0; 95782ebe33SAndrew Jones 96782ebe33SAndrew Jones while (n--) { 97782ebe33SAndrew Jones ret = *a - *b; 98782ebe33SAndrew Jones if (ret) 99782ebe33SAndrew Jones break; 100782ebe33SAndrew Jones ++a, ++b; 101782ebe33SAndrew Jones } 102782ebe33SAndrew Jones return ret; 103782ebe33SAndrew Jones } 104782ebe33SAndrew Jones 105782ebe33SAndrew Jones void *memmove(void *dest, const void *src, size_t n) 106782ebe33SAndrew Jones { 107782ebe33SAndrew Jones const unsigned char *s = src; 108782ebe33SAndrew Jones unsigned char *d = dest; 109782ebe33SAndrew Jones 110782ebe33SAndrew Jones if (d <= s) { 111782ebe33SAndrew Jones while (n--) 112782ebe33SAndrew Jones *d++ = *s++; 113782ebe33SAndrew Jones } else { 114782ebe33SAndrew Jones d += n, s += n; 115782ebe33SAndrew Jones while (n--) 116782ebe33SAndrew Jones *--d = *--s; 117782ebe33SAndrew Jones } 118782ebe33SAndrew Jones return dest; 119782ebe33SAndrew Jones } 120782ebe33SAndrew Jones 121782ebe33SAndrew Jones void *memchr(const void *s, int c, size_t n) 122782ebe33SAndrew Jones { 123782ebe33SAndrew Jones const unsigned char *str = s, chr = (unsigned char)c; 124782ebe33SAndrew Jones 125782ebe33SAndrew Jones while (n--) 126782ebe33SAndrew Jones if (*str++ == chr) 127782ebe33SAndrew Jones return (void *)(str - 1); 128782ebe33SAndrew Jones return NULL; 129782ebe33SAndrew Jones } 130782ebe33SAndrew Jones 1311b708e8cSJason Wang long atol(const char *ptr) 1321b708e8cSJason Wang { 1331b708e8cSJason Wang long acc = 0; 1341b708e8cSJason Wang const char *s = ptr; 1351b708e8cSJason Wang int neg, c; 1361b708e8cSJason Wang 1371b708e8cSJason Wang while (*s == ' ' || *s == '\t') 1381b708e8cSJason Wang s++; 1391b708e8cSJason Wang if (*s == '-'){ 1401b708e8cSJason Wang neg = 1; 1411b708e8cSJason Wang s++; 1421b708e8cSJason Wang } else { 1431b708e8cSJason Wang neg = 0; 1441b708e8cSJason Wang if (*s == '+') 1451b708e8cSJason Wang s++; 1461b708e8cSJason Wang } 1471b708e8cSJason Wang 1481b708e8cSJason Wang while (*s) { 1491b708e8cSJason Wang if (*s < '0' || *s > '9') 1501b708e8cSJason Wang break; 1511b708e8cSJason Wang c = *s - '0'; 1521b708e8cSJason Wang acc = acc * 10 + c; 1531b708e8cSJason Wang s++; 1541b708e8cSJason Wang } 1551b708e8cSJason Wang 1561b708e8cSJason Wang if (neg) 1571b708e8cSJason Wang acc = -acc; 1581b708e8cSJason Wang 1591b708e8cSJason Wang return acc; 1601b708e8cSJason Wang } 161*69205bf1SAndrew Jones 162*69205bf1SAndrew Jones extern char **environ; 163*69205bf1SAndrew Jones 164*69205bf1SAndrew Jones char *getenv(const char *name) 165*69205bf1SAndrew Jones { 166*69205bf1SAndrew Jones char **envp = environ, *delim; 167*69205bf1SAndrew Jones 168*69205bf1SAndrew Jones while (*envp) { 169*69205bf1SAndrew Jones delim = strchr(*envp, '='); 170*69205bf1SAndrew Jones if (delim && strncmp(name, *envp, delim - *envp) == 0) 171*69205bf1SAndrew Jones return delim + 1; 172*69205bf1SAndrew Jones ++envp; 173*69205bf1SAndrew Jones } 174*69205bf1SAndrew Jones return NULL; 175*69205bf1SAndrew Jones } 176