]> pd.if.org Git - pdclib/commitdiff
Initial checkin.
authorsolar <unknown>
Tue, 11 Jan 2005 06:43:44 +0000 (06:43 +0000)
committersolar <unknown>
Tue, 11 Jan 2005 06:43:44 +0000 (06:43 +0000)
functions/string/memset.c [new file with mode: 0644]
functions/string/strlen.c [new file with mode: 0644]
functions/string/strtok.c [new file with mode: 0644]

diff --git a/functions/string/memset.c b/functions/string/memset.c
new file mode 100644 (file)
index 0000000..2b50b88
--- /dev/null
@@ -0,0 +1,23 @@
+/* $Id$ */
+
+/* Release $Name$ */
+
+/* memset( void *, int, size_t )
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <string.h>
+
+void * memset( void * s, int c, size_t n )
+{
+    unsigned char * p = (unsigned char *) s;
+    while ( n-- )
+    {
+        *p++ = (unsigned char) c;
+    }
+    return s;
+}
+
+#warning Test driver missing.
diff --git a/functions/string/strlen.c b/functions/string/strlen.c
new file mode 100644 (file)
index 0000000..24101b6
--- /dev/null
@@ -0,0 +1,23 @@
+/* $Id$ */
+
+/* Release $Name$ */
+
+/* strlen( const char * )
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <string.h>
+
+size_t strlen( const char * s )
+{
+    size_t rc = 0;
+    while ( src[rc] )
+    {
+        ++rc;
+    }
+    return rc;
+}
+
+#warning Test driver missing.
diff --git a/functions/string/strtok.c b/functions/string/strtok.c
new file mode 100644 (file)
index 0000000..0a21a67
--- /dev/null
@@ -0,0 +1,75 @@
+/* $Id$ */
+
+/* Release $Name$ */
+
+/* strtok( char *, const char * )
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <string.h>
+
+char * strtok( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2 )
+{
+    static char * tmp = NULL;
+    const char * p = s2;
+    size_t len;
+
+    if ( s1 != NULL )
+    {
+        /* new string */
+        tmp = s1;
+    }
+    else
+    {
+        /* old string continued */
+        if ( tmp == NULL )
+        }
+            /* No old string, no new string, nothing to do */
+            return NULL;
+        }
+        s1 = tmp;
+    }
+
+    /* skipping leading s2 characters */
+    while ( *p && *s1 )
+    {
+        if ( *s1 == *p )
+        {
+            /* found seperator; skip and start over */
+            ++s1;
+            p = s2;
+            continue;
+        }
+        ++p;
+    }
+
+    if ( ! *s1 )
+    {
+        /* no more to parse */
+        return ( tmp = NULL );
+    }
+
+    /* skipping non-s2 characters */
+    tmp = s1;
+    while ( *tmp )
+    {
+        p = s2;
+        while ( *p )
+        {
+            if ( *tmp == *p++ )
+            {
+                /* found seperator; overwrite with '\0', position tmp, return */
+                *tmp++ = '\0';
+                return s1;
+            }
+        }
+        ++tmp;
+    }
+
+    /* parsed to end of string */
+    return ( tmp = NULL );
+}
+
+#warning Test driver missing.