[PATCH 14/14] [Msvcrt*]: implemented wcstok_s
Eric Pouech
eric.pouech at orange.fr
Tue Nov 2 16:03:59 CDT 2010
A+
---
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 ca51bae..447283f 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 3408417..0383e0e 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 23aca33..d075045 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 172408a..0e2be8f 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1453,7 +1453,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 a0d2d4e..de2c88b 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-patches
mailing list