]> pd.if.org Git - pdclib/blobdiff - functions/wchar/wcstok.c
dos2unix
[pdclib] / functions / wchar / wcstok.c
index 13415198d364db0f08f9a0a0b75d3fad91f75219..b8bcf14184a0f7f8c562efa794e406537d125f92 100644 (file)
-/* wcstok( wchar_t *, const wchar_t * )\r
-\r
-   This file is part of the Public Domain C Library (PDCLib).\r
-   Permission is granted to use, modify, and / or redistribute at will.\r
-*/\r
-\r
-#include <wchar.h>\r
-\r
-#ifndef REGTEST\r
-\r
-wchar_t * wcstok( wchar_t * _PDCLIB_restrict s1, \r
-                  const wchar_t * _PDCLIB_restrict s2,\r
-                  wchar_t ** _PDCLIB_restrict ptr )\r
-{\r
-    const wchar_t * p = s2;\r
-\r
-    if ( s1 != NULL )\r
-    {\r
-        /* new string */\r
-        *ptr = s1;\r
-    }\r
-    else\r
-    {\r
-        /* old string continued */\r
-        if ( *ptr == NULL )\r
-        {\r
-            /* No old string, no new string, nothing to do */\r
-            return NULL;\r
-        }\r
-        s1 = *ptr;\r
-    }\r
-\r
-    /* skipping leading s2 characters */\r
-    while ( *p && *s1 )\r
-    {\r
-        if ( *s1 == *p )\r
-        {\r
-            /* found seperator; skip and start over */\r
-            ++s1;\r
-            p = s2;\r
-            continue;\r
-        }\r
-        ++p;\r
-    }\r
-\r
-    if ( ! *s1 )\r
-    {\r
-        /* no more to parse */\r
-        return ( *ptr = NULL );\r
-    }\r
-\r
-    /* skipping non-s2 characters */\r
-    *ptr = s1;\r
-    while ( **ptr )\r
-    {\r
-        p = s2;\r
-        while ( *p )\r
-        {\r
-            if ( **ptr == *p++ )\r
-            {\r
-                /* found seperator; overwrite with '\0', position *ptr, return */\r
-                *(*ptr)++ = L'\0';\r
-                return s1;\r
-            }\r
-        }\r
-        ++(*ptr);\r
-    }\r
-\r
-    /* parsed to end of string */\r
-    *ptr = NULL;\r
-    return s1;\r
-}\r
-\r
-#endif\r
-\r
-#ifdef TEST\r
-#include "_PDCLIB_test.h"\r
-\r
-int main( void )\r
-{\r
-    // MinGW at least has a very nonconforming (different signature!) variety\r
-    // of wcstok\r
-#ifndef REGTEST\r
-    wchar_t s[] = L"_a_bc__d_";\r
-    wchar_t* state  = NULL;\r
-    wchar_t* tokres;\r
-\r
-    TESTCASE( ( tokres = wcstok( s, L"_", &state ) ) == &s[1] );\r
-    TESTCASE( s[1] == L'a' );\r
-    TESTCASE( s[2] == L'\0' );\r
-    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == &s[3] );\r
-    TESTCASE( s[3] == L'b' );\r
-    TESTCASE( s[4] == L'c' );\r
-    TESTCASE( s[5] == L'\0' );\r
-    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == &s[7] );\r
-    TESTCASE( s[6] == L'_' );\r
-    TESTCASE( s[7] == L'd' );\r
-    TESTCASE( s[8] == L'\0' );\r
-    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == NULL );\r
-    wcscpy( s, L"ab_cd" );\r
-    TESTCASE( ( tokres = wcstok( s, L"_", &state ) ) == &s[0] );\r
-    TESTCASE( s[0] == L'a' );\r
-    TESTCASE( s[1] == L'b' );\r
-    TESTCASE( s[2] == L'\0' );\r
-    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == &s[3] );\r
-    TESTCASE( s[3] == L'c' );\r
-    TESTCASE( s[4] == L'd' );\r
-    TESTCASE( s[5] == L'\0' );\r
-    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == NULL );\r
-#endif\r
-    return TEST_RESULTS;\r
-}\r
-#endif\r
+/* wcstok( wchar_t *, const wchar_t * )
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <wchar.h>
+
+#ifndef REGTEST
+
+wchar_t * wcstok( wchar_t * _PDCLIB_restrict s1, 
+                  const wchar_t * _PDCLIB_restrict s2,
+                  wchar_t ** _PDCLIB_restrict ptr )
+{
+    const wchar_t * p = s2;
+
+    if ( s1 != NULL )
+    {
+        /* new string */
+        *ptr = s1;
+    }
+    else
+    {
+        /* old string continued */
+        if ( *ptr == NULL )
+        {
+            /* No old string, no new string, nothing to do */
+            return NULL;
+        }
+        s1 = *ptr;
+    }
+
+    /* 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 ( *ptr = NULL );
+    }
+
+    /* skipping non-s2 characters */
+    *ptr = s1;
+    while ( **ptr )
+    {
+        p = s2;
+        while ( *p )
+        {
+            if ( **ptr == *p++ )
+            {
+                /* found seperator; overwrite with '\0', position *ptr, return */
+                *(*ptr)++ = L'\0';
+                return s1;
+            }
+        }
+        ++(*ptr);
+    }
+
+    /* parsed to end of string */
+    *ptr = NULL;
+    return s1;
+}
+
+#endif
+
+#ifdef TEST
+#include "_PDCLIB_test.h"
+
+int main( void )
+{
+    // MinGW at least has a very nonconforming (different signature!) variety
+    // of wcstok
+#ifndef REGTEST
+    wchar_t s[] = L"_a_bc__d_";
+    wchar_t* state  = NULL;
+    wchar_t* tokres;
+
+    TESTCASE( ( tokres = wcstok( s, L"_", &state ) ) == &s[1] );
+    TESTCASE( s[1] == L'a' );
+    TESTCASE( s[2] == L'\0' );
+    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == &s[3] );
+    TESTCASE( s[3] == L'b' );
+    TESTCASE( s[4] == L'c' );
+    TESTCASE( s[5] == L'\0' );
+    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == &s[7] );
+    TESTCASE( s[6] == L'_' );
+    TESTCASE( s[7] == L'd' );
+    TESTCASE( s[8] == L'\0' );
+    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == NULL );
+    wcscpy( s, L"ab_cd" );
+    TESTCASE( ( tokres = wcstok( s, L"_", &state ) ) == &s[0] );
+    TESTCASE( s[0] == L'a' );
+    TESTCASE( s[1] == L'b' );
+    TESTCASE( s[2] == L'\0' );
+    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == &s[3] );
+    TESTCASE( s[3] == L'c' );
+    TESTCASE( s[4] == L'd' );
+    TESTCASE( s[5] == L'\0' );
+    TESTCASE( ( tokres = wcstok( NULL, L"_", &state ) ) == NULL );
+#endif
+    return TEST_RESULTS;
+}
+#endif