Farid Zaripov-2 wrote: > > The all MSVC has the non-standard prototype of the wcstok(): > > wchar_t* wcstok(wchar_t*, const wchar_t*); > > > The prototype from C standard: > wchar_t* wcstok(wchar_t*, const wchar_t*, wchar_t**); > > > Since the configure script performs checking only names and doesn't > checking the correct prototype, the _RWSTD_NO_WCSTOK macro is > not defined in config.h. As a result the 21.cwchar.cpp test asserts on > "wcstok() not declared". > >
But there is a mechanism to check for signatures too, isn't there? Could we use it to detect this or are you saying even this is not enough? Martin > > However the MSVC 8 and later has the wcstok_s() function with the > prototype similar to the standard wcstok(): > > wchar_t* wcstok_s(wchar_t* _Str, const wchar_t* _Delim, wchar_t ** > _Context); > > > I've propose the following changes: > > ChangeLog: > * rw/_config_msvcrt.h: #define _RWSTD_NO_WCSTOK and > _RWSTD_NO_WCSTOK_IN_LIBC > macros since the MSVC has the non-standard prototype of the wcstok(). > * ansi/cwchar [_MSC_VER >= 1400]: Define inline wcstok() function > using wcstok_s(). > #undefine _RWSTD_NO_WCSTOK and _RWSTD_NO_WCSTOK_IN_LIBC macros. > > > Index: include/ansi/cwchar > =================================================================== > --- include/ansi/cwchar (revision 596338) > +++ include/ansi/cwchar (working copy) > @@ -1074,6 +1074,22 @@ > using ::wcstok; > > # undef _RWSTD_NO_WCSTOK > +#elif defined (_MSC_VER) && 1400 <= _MSC_VER > + > +} // namespace std > + > +/* extern "C++" */ inline wchar_t* > +wcstok (wchar_t* __s1, const wchar_t* __s2, wchar_t** __ptr) > +{ > + return wcstok_s (__s1, __s2, __ptr); > +} > + > +namespace std { > + > +using ::wcstok; > + > +# undef _RWSTD_NO_WCSTOK > +# undef _RWSTD_NO_WCSTOK_IN_LIBC > #endif // _RWSTD_NO_WCSTOK[_IN_LIBC] > > #ifndef _RWSTD_NO_WCSTOL > Index: include/rw/_config-msvcrt.h > =================================================================== > --- include/rw/_config-msvcrt.h (revision 596338) > +++ include/rw/_config-msvcrt.h (working copy) > @@ -54,6 +54,15 @@ > # define _RWSTD_NO_DEPRECATED_C_HEADERS > #endif // _RWSTD_NO_DEPRECATED_C_HEADERS > > +#ifndef _RWSTD_NO_WCSTOK > +// MSVC CRT has incorrect prototype of the wcstok() > +# define _RWSTD_NO_WCSTOK > +#endif // _RWSTD_NO_WCSTOK > + > +#ifndef _RWSTD_NO_WCSTOK_IN_LIBC > +# define _RWSTD_NO_WCSTOK_IN_LIBC > +#endif // _RWSTD_NO_WCSTOK_IN_LIBC > + > // operator new and delete is not reliably replaceable across > // shared library boundaries, which includes the shared library > // version of the language support library > > Farid. > > -- View this message in context: http://www.nabble.com/-PATCH--MSVC-has-non-standard-prototype-of-the-wcstok%28%29-tp13857994p14289929.html Sent from the stdcxx-dev mailing list archive at Nabble.com.