]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - lib/c/freestanding/string.c
More libc functions, and build-as-c fixes.
[polintos/scott/priv.git] / lib / c / freestanding / string.c
index a3bb62e63384a328bf5453fc41a5f1bb87c6275c..0241f91b5c10176ef2fb8f54fc3b179e16717699 100644 (file)
 
 void *memcpy(void *dest, const void *src, size_t len)
 {
-       const char *cs = static_cast<const char *>(src);
-       char *cd = static_cast<char *>(dest);
+       const char *cs = src;
+       char *cd = dest;
+       size_t i;
 
-       for (size_t i = 0; i < len; i++)
+       for (i = 0; i < len; i++)
                cd[i] = cs[i];
 
        return dest;
@@ -28,13 +29,14 @@ void *memcpy(void *dest, const void *src, size_t len)
 
 void *memmove(void *dest, const void *src, size_t len)
 {
+       const char *cs = src;
+       char *cd = dest;
+       size_t i;
+
        if (dest < src)
                return memcpy(dest, src, len);
 
-       const char *cs = static_cast<const char *>(src);
-       char *cd = static_cast<char *>(dest);
-
-       for (size_t i = len - 1; i >= 0; i--)
+       for (i = len - 1; i >= 0; i--)
                cd[i] = cs[i];
 
        return dest;
@@ -43,8 +45,8 @@ void *memmove(void *dest, const void *src, size_t len)
 int memcmp(const void *b1, const void *b2, size_t len)
 {
        size_t pos;
-       const char *c1 = static_cast<const char *>(b1);
-       const char *c2 = static_cast<const char *>(b2);
+       const char *c1 = b1;
+       const char *c2 = b2;
        
        for (pos = 0; pos < len; pos++) {
                if (c1[pos] != c2[pos])
@@ -56,19 +58,33 @@ int memcmp(const void *b1, const void *b2, size_t len)
        return 0;
 }
 
+void *memset(void *b, int ch, size_t len)
+{
+       char *c = b;
+       
+       while (len--)
+               *c++ = ch;
+
+       return b;
+}
+
 size_t strnlen(const char *s, size_t n)
 {
        size_t pos = 0;
+
        while (pos < n && *s++)
                pos++;
+
        return pos;
 }
 
 size_t strlen(const char *s)
 {
        size_t pos = 0;
+
        while (*s++)
                pos++;
+
        return pos;
 }
 
@@ -129,12 +145,36 @@ char *strncat(char *dest, const char *src, size_t len)
        return orig;
 }
 
-void *memset(void *b, int ch, size_t len)
+int strcmp(const char *s1, const char *s2)
 {
-       char *c = static_cast<char *>(b);
-       
-       while (len--)
-               *c++ = ch;
+       while (*s1 && *s2 && *s1 == *s2) {
+               s1++;
+               s2++;
+       }
 
-       return b;
+       return *s2 - *s1;
+}
+
+int strncmp(const char *s1, const char *s2, int n)
+{
+       int i = 0;
+
+       while (i < n && s1[i] && s2[i] && s1[i] == s2[i])
+               i++;
+
+       if (i == n)
+               return 0;
+
+       return *s2 - *s1;
+}
+
+char *strchr(const char *s, int c)
+{
+       while (*s && *s != c)
+               s++;
+
+       if (*s == c) 
+               return (char *)s;
+
+       return NULL;
 }