[ros-dev] [ros-diffs] [ekohl] 47071: [NEWINFLIB] - Change Unicode string functions from wcs* to str*W because glibc (Linux build) provides the wcs* functions but they use a wchar_t size of 32 bits instead of the required 16 bits. - Add a str*W to wcs* wrapper (infrosrtl.c) in order to use the wcs* function for the WIN32 build. - Add required str*W functions to the host library. ATTENTION: This might break the build bot although it has been tested on Windows and Linux!!!

Eric Kohl eric.kohl at t-online.de
Sat May 1 17:05:28 CEST 2010


> ekohl at svn.reactos.org wrote:
>>  PWSTR utf16_wcschr(PWSTR str, WCHAR c)
>> +{
>> +    SIZE_T i;
>> +
>> +    for(i = 0; str[i] && str[i] != c; i++);
>> +
>> +    if(str[i])
>> +        return &str[i];
>> +    else
>> +        return NULL;
>> +}
>> +
>> +PWSTR strchrW(PWSTR str, WCHAR c)
> 
> Why do you duplicate the same code for these wide-char string functions
> here, just under a different name?
> The utf16_* family of functions in this file was particularly designed to
> address the issue of different wchar_t lengths on different hosts. It's
> meant to be used together with the include/host/wcsfuncs.h header.
> 
> If you need an example, cmlib is one library using these functions (see
> e.g. "cmlib.h" for the proper header inclusion, "cminit.c" for a use, etc.)

Hello Colin,

this is just an intermediate step. In one of my next patches I will 
remove /lib/host entirely because /lib/unicode supercedes it and is 
already used by tools like widl and wrc. Why shouldn't cmlib, newinflib 
and mkhive use it too?

The only changes to the source code are conversions from wcs* to str*W 
and from isw* to is*W. So for the host builds we will only use the *W 
functions if we are dealing with Unicode strings. The Win32 builds can 
map the *W funtions to the wcs* or isw* functions using the 
include/host/wcsfuncs.h header file.

Can you agree with this change?

Regards,
Eric



More information about the Ros-dev mailing list