Eric Pouech : msvcrt: Implemented wcstok_s.

Alexandre Julliard julliard at winehq.org
Wed Nov 3 11:37:04 CDT 2010


Module: wine
Branch: master
Commit: 4b6d5fd583bfc39cd7d9877c333eddb7f2fa3e36
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4b6d5fd583bfc39cd7d9877c333eddb7f2fa3e36

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Tue Nov  2 22:03:59 2010 +0100

msvcrt: Implemented wcstok_s.

---

 dlls/msvcr100/msvcr100.spec |    2 +-
 dlls/msvcr80/msvcr80.spec   |    2 +-
 dlls/msvcr90/msvcr90.spec   |    2 +-
 dlls/msvcrt/msvcrt.spec     |    2 +-
 dlls/msvcrt/wcs.c           |   24 ++++++++++++++++++------
 5 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 4b5300f..800fc31 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1653,7 +1653,7 @@
 @ cdecl wcsstr(wstr wstr) msvcrt.wcsstr
 @ cdecl wcstod(wstr ptr) msvcrt.wcstod
 @ cdecl wcstok(wstr wstr) msvcrt.wcstok
-@ stub wcstok_s
+@ cdecl wcstok_s(ptr wstr ptr) msvcrt.wcstok_s
 @ cdecl wcstol(wstr ptr long) msvcrt.wcstol
 @ cdecl wcstombs(ptr ptr long) msvcrt.wcstombs
 @ cdecl wcstombs_s(ptr ptr long wstr long) msvcrt.wcstombs_s
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 639c14d..5dfce03 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1507,7 +1507,7 @@
 @ cdecl wcsstr(wstr wstr) msvcrt.wcsstr
 @ cdecl wcstod(wstr ptr) msvcrt.wcstod
 @ cdecl wcstok(wstr wstr) msvcrt.wcstok
-@ stub wcstok_s
+@ cdecl wcstok_s(ptr wstr ptr) msvcrt.wcstok_s
 @ cdecl wcstol(wstr ptr long) msvcrt.wcstol
 @ cdecl wcstombs(ptr ptr long) msvcrt.wcstombs
 @ cdecl wcstombs_s(ptr ptr long wstr long) msvcrt.wcstombs_s
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 19a0ec9..2e63ad7 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1491,7 +1491,7 @@
 @ cdecl wcsstr(wstr wstr) msvcrt.wcsstr
 @ cdecl wcstod(wstr ptr) msvcrt.wcstod
 @ cdecl wcstok(wstr wstr) msvcrt.wcstok
-@ stub wcstok_s
+@ cdecl wcstok_s(ptr wstr ptr) msvcrt.wcstok_s
 @ cdecl wcstol(wstr ptr long) msvcrt.wcstol
 @ cdecl wcstombs(ptr ptr long) msvcrt.wcstombs
 @ cdecl wcstombs_s(ptr ptr long wstr long) msvcrt.wcstombs_s
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 10a8870..70d28ce 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1457,7 +1457,7 @@
 @ cdecl wcsstr(wstr wstr) ntdll.wcsstr
 @ cdecl wcstod(wstr ptr) MSVCRT_wcstod
 @ cdecl wcstok(wstr wstr) MSVCRT_wcstok
-# stub wcstok_s
+@ cdecl wcstok_s(ptr wstr ptr)
 @ cdecl wcstol(wstr ptr long) ntdll.wcstol
 @ cdecl wcstombs(ptr ptr long) MSVCRT_wcstombs
 @ cdecl wcstombs_s(ptr ptr long wstr long) MSVCRT_wcstombs_s
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index 1042008..48831b2 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -1368,25 +1368,37 @@ MSVCRT_wchar_t* CDECL MSVCRT_wcspbrk( const MSVCRT_wchar_t* str, const MSVCRT_wc
 }
 
 /*********************************************************************
- *		wcstok  (MSVCRT.@)
+ *		wcstok_s  (MSVCRT.@)
  */
-MSVCRT_wchar_t * CDECL MSVCRT_wcstok( MSVCRT_wchar_t *str, const MSVCRT_wchar_t *delim )
+MSVCRT_wchar_t * CDECL wcstok_s( MSVCRT_wchar_t *str, const MSVCRT_wchar_t *delim,
+                                 MSVCRT_wchar_t **next_token )
 {
-    thread_data_t *data = msvcrt_get_thread_data();
     MSVCRT_wchar_t *ret;
 
-    if (!str)
-        if (!(str = data->wcstok_next)) return NULL;
+    if (!MSVCRT_CHECK_PMT(delim != NULL) || !MSVCRT_CHECK_PMT(next_token != NULL) ||
+        !MSVCRT_CHECK_PMT(str != NULL || *next_token != NULL))
+    {
+        *MSVCRT__errno() = MSVCRT_EINVAL;
+        return NULL;
+    }
+    if (!str) str = *next_token;
 
     while (*str && strchrW( delim, *str )) str++;
     if (!*str) return NULL;
     ret = str++;
     while (*str && !strchrW( delim, *str )) str++;
     if (*str) *str++ = 0;
-    data->wcstok_next = str;
+    *next_token = str;
     return ret;
 }
 
+/*********************************************************************
+ *		wcstok  (MSVCRT.@)
+ */
+MSVCRT_wchar_t * CDECL MSVCRT_wcstok( MSVCRT_wchar_t *str, const MSVCRT_wchar_t *delim )
+{
+    return wcstok_s(str, delim, &msvcrt_get_thread_data()->wcstok_next);
+}
 
 /*********************************************************************
  *		wctomb (MSVCRT.@)




More information about the wine-cvs mailing list