Module: wine Branch: master Commit: 4b6d5fd583bfc39cd7d9877c333eddb7f2fa3e36 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4b6d5fd583bfc39cd7d9877c33...
Author: Eric Pouech eric.pouech@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.@)