// 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;
// 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;
}
-*/
// 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)
{