-/* 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
- 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
- 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