[Bug 51899] 16-bit Collins Dictionary has black background.

WineHQ Bugzilla wine-bugs at winehq.org
Sat Oct 23 14:25:03 CDT 2021


https://bugs.winehq.org/show_bug.cgi?id=51899

--- Comment #12 from Bruni <earns.61 at gmail.com> ---
I've realized my previous comment contains a mistake.

> So in if ((x && y) || !z) { body } expression,

> it's enough for both x and y to be true or for z to be false to execute if's body.

> So z can be split into separate if, which can be placed after original if, copying its body.

> Which results in
> if (x && y) { body }
> if (!z) { body }

> In if (x && y) { body } expression,

> it's enough for x to be false to not execute if's body.
> And one can immediately return in our case, where if's body is the last block before `return`.

> So one can decompose it as follows

> if (!x) return
> if (y) { body }
> if (!z) { body }

Even if `x` is false, execution framework cannot leave the whole test
expression until z is testified.

So `x` can be split from `y` only with testifying `z`

So get_dc_attr function body must be as follows.

DC_ATTR *get_dc_attr( HDC hdc )
{
    DWORD handle_type_bit_mask = 0x1f0000;
    DWORD type = gdi_handle_type( hdc );
    DC_ATTR *dc_attr = get_gdi_client_ptr( hdc, 0 );

    if (!type && dc_attr)
        return dc_attr->disabled ? NULL : dc_attr;

    if ((type & handle_type_bit_mask) != NTGDI_OBJ_DC)
    {
        SetLastError( ERROR_INVALID_HANDLE );
        return NULL;
    }

    if (!dc_attr)
    {
        SetLastError( ERROR_INVALID_HANDLE );
        return NULL;
    }

    return dc_attr->disabled ? NULL : dc_attr;
}

This variant looks correct to me.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list