]> pd.if.org Git - pdclib/commitdiff
Reviewed.
authorsolar <unknown>
Sun, 18 Jan 2004 15:21:10 +0000 (15:21 +0000)
committersolar <unknown>
Sun, 18 Jan 2004 15:21:10 +0000 (15:21 +0000)
functions/string/memchr.c
functions/string/memcmp.c
functions/string/memcpy.c

index e09df0d4a157b49cc5de835e05318811ca45b9f1..a584568a22dc4a9c992b8953f8d3780deff670fa 100644 (file)
@@ -5,6 +5,8 @@
 // This code is Public Domain. Use, modify, and redistribute at will.
 // ----------------------------------------------------------------------------
 
+#include <string.h>
+
 void * memchr( const void * src, int c, size_t n )
 {
     const unsigned char * p = (const unsigned char *) src;
index c16d50a0f5e5fe7e4f988bf84263f767af9800f2..fdda92ce7689a8aa6aaaf7c125587d79c1a167b2 100644 (file)
@@ -5,22 +5,20 @@
 // This code is Public Domain. Use, modify, and redistribute at will.
 // ----------------------------------------------------------------------------
 
-int memcmp( const void * s1, const void * s2, size_t n ) { /* TODO */ };
+#include <string.h>
 
-/* PDPC code - unreviewed
+int memcmp( const void * src_1, const void * src_2, size_t n )
 {
-    const unsigned char *p1;
-    const unsigned char *p2;
-    size_t x = 0;
-    
-    p1 = (const unsigned char *)s1;
-    p2 = (const unsigned char *)s2;
-    while (x < n)
+    const unsigned char * p1 = (const unsigned char *) src_1;
+    const unsigned char * p2 = (const unsigned char *) src_2;
+    while ( n-- )
     {
-        if (p1[x] < p2[x]) return (-1);
-        else if (p1[x] > p2[x]) return (1);
-        x++;
+        if ( *p1 != *p2 )
+        {
+            return *p2 - *p1;
+        }
+        ++p1;
+        ++p2;
     }
-    return (0);
+    return 0;
 }
-*/
index d53b22e0fa3ae3fb2b063ec92234989ce69cbee2..2990952679275fba517edfb5fe0e50f23848eec7 100644 (file)
@@ -5,42 +5,27 @@
 // This code is Public Domain. Use, modify, and redistribute at will.
 // ----------------------------------------------------------------------------
 
-void * memcpy( void * restrict s1, const void * restrict s2, size_t n ) { /* TODO */ };
+#include <string.h>
 
-/* Therx code
+void * memcpy( void * restrict dest, const void * restrict src, size_t n )
 {
-    void * ret = s1;
-    const char * src = (const char *) s2;
-    char * dst = (char *) s1;
-    for( ; n != 0; n-- )
+    const char * src_p = (const char *) src;
+    char * dest_p = (char *) dest;
+    while ( n-- )
     {
-        *dst++ = *src++;
+        *dest_p++ = *src_p++;
     }
-    return ret;
+    return dest;
 }
-*/
 
-/* PDPC code - unreviewed
-void *memcpy(void *s1, const void *s2, size_t n)
-{
-    register const unsigned char *f = s2;
-    register const unsigned char *fe;
-    register unsigned char *t = s1;
-    
-    fe = f + n;
-    while (f != fe)
-    {
-        *t++ = *f++;
-    }
-    return (s1);
-}
-#else
+/* TODO: This is code from PDPC, optimizing for word access.
+
 void *memcpy(void *s1, const void *s2, size_t n)
 {
     register unsigned int *p = (unsigned int *)s1;
     register unsigned int *cs2 = (unsigned int *)s2;
     register unsigned int *endi;
-    
+
     endi = (unsigned int *)((char *)p + (n & ~0x03));
     while (p != endi)
     {