[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/5] ide: Prohibit RESET on IDE drives
From: |
Laszlo Ersek |
Subject: |
Re: [Qemu-devel] [PATCH 1/5] ide: Prohibit RESET on IDE drives |
Date: |
Tue, 19 Jan 2016 18:26:29 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 |
On 01/19/16 18:04, John Snow wrote:
>
>
> On 01/19/2016 06:48 AM, Paolo Bonzini wrote:
>>
>>
>> On 19/01/2016 05:51, John Snow wrote:
>>> + /* Only RESET is allowed to an ATAPI device while BSY and/or DRQ are
>>> set. */
>>> + if (s->status & (BUSY_STAT|DRQ_STAT)) {
>>> + if (!(val == WIN_DEVICE_RESET) && (s->drive_kind == IDE_CD)) {
>>
>> I was going to complain about Pascal-ish parentheses, but actually I
>> think there is a bug here; the expression just looks weird.
>>
>> Did you mean
>>
>> if (!(val == WIN_DEVICE_RESET && s->drive_kind == IDE_CD))
>>
>> or equivalently applying de Morgan's law:
>>
>> if (s->drive_kind != IDE_CD || val != WIN_DEVICE_RESET)
>>
>> ?
>>
>> Paolo
>>
>>> + return;
>>
>
> ugh, yes, I typo'd. Thank you.
>
> If you're still up, which do you find more readable?
> The (!(A && B)) form or the (!A || !B) form?
You didn't ask me, but that's no problem for me. :)
The logical negation operator "!" has much-much stronger binding than
the logical "and" and logical "or" ones. If you use the first form,
!(A && B)
it works, but spacetime will curl every time someone sees those
parentheses overriding the nice n' tight binding of "!".
So, for me, only the second form *exists* -- for me, the operand of the
logical negation operator must always be as "indivisible" an expression
as possible :)
So,
(!A || !B)
without a doubt.
Thanks
Laszlo