ntdll: Store all 'comClass' attributes (try3)

Michael Stefaniuc mstefani at redhat.com
Wed Aug 28 16:00:29 CDT 2013


Hello Nikolay,

On 08/27/2013 12:16 PM, Nikolay Sivov wrote:
> +static OLEMISC get_olemisc_value(const WCHAR *str, int len)
> +{
> +    int min, max;
> +
> +    min = 0;
> +    max = sizeof(olemisc_values)/sizeof(struct olemisc_entry) - 1;
> +
> +    while (min <= max)
> +    {
> +        int n, c;
> +
> +        n = (min+max)/2;
> +
> +        c = strncmpW(olemisc_values[n].name, str, len);
why don't you just compare the length first? If the length matches you
can do a simple strcmpW between the strings to verify the match.
Something like the below code:

if (olemisc_values[n].len == len)
{
    if (!strcmpW(olemisc_values[n].name, str)
        return olemisc_values[n].value;
    else
        ...
}
else if (olemisc_values[n].len > len)
    max = n-1;
else
    min = n+1;


> +        if (!c)
> +        {
> +            if (olemisc_values[n].len < len)
> +                c = -1;
> +            else if (olemisc_values[n].len > len)
> +                c = 1;
> +        }
> +
> +        if (!c)
> +            return olemisc_values[n].value;
> +
> +        if (c > 0)
> +            max = n-1;
> +        else
> +            min = n+1;
> +    }
> +
> +    WARN("unknown flag %s\n", debugstr_wn(str, len));
> +    return 0;
> +}

bye
    michael



More information about the wine-devel mailing list