"Dmitry Timoshkov" <[EMAIL PROTECTED]> wrote:

> >
/**************************************************************************
> > + *  RtlUpperChar   (NTDLL.@)
> > + */
> > +CHAR WINAPI RtlUpperChar( CHAR ch )
> > +{
> > +    return toupper(ch);
> > +}
>
> It's better to avoid using locale dependent functions from an underlying
> system because Wine internal code page almost always is different from OS
> locale. The way to go is convert to unicode, do desired things, and
convert
> the result back to ansi.

The implementation of RtlUpperString in rtlstr.c gave me the idea to use
toupper:

/**************************************************************************
 *   RtlUpperString   (NTDLL.@)
 */
void WINAPI RtlUpperString( STRING *dst, const STRING *src )
{
    unsigned int i, len = min(src->Length, dst->MaximumLength);

    for (i = 0; i < len; i++) dst->Buffer[i] = toupper(src->Buffer[i]);
    dst->Length = len;
}

The docu of RtlUpperChar says:

RtlUpperChar returns the uppercase version of the specified character or
returns the value specified by the caller for Character if the specified
character cannot be converted.

RtlUpperChar returns the input Character unconverted if it is the lead byte
of a multibyte character or if the uppercase equivalent of Character is a
double-byte character. To convert such characters, use
RtlUpcaseUnicodeChar.
--- End of docu --

IMHO RtlUpperChar has nothing to do for unicode chars.
Is there a way to use Wine internal code page to do the conversion without
converting to unicode and back?

BTW: If it is not ok to use toupper several other places in wine have a
problem:

$ grep toupper */*.c */*/*.c */*/*/*.c  | grep -v toupperW | grep -v
str_toupper

in wine-20030115 gives a longer list of usages of toupper.

Specially msvcrt toupper seems also to use the function from libc.

Greetings
Thomas Mertes




Reply via email to