[pacman-dev] INFRQ_* confusion
Nagy Gabor
ngaba at petra.hos.u-szeged.hu
Fri Mar 2 12:55:35 EST 2007
On Wed, 28 Feb 2007, Aaron Griffin wrote:
> On 2/28/07, Aaron Griffin <aaronmgriffin at gmail.com> wrote:
>> On 2/28/07, Nagy Gabor <ngaba at petra.hos.u-szeged.hu> wrote:
>>> As I see, the author thinks of inforeq as exactly one bit is set to 1.
>>> However, if inforeq=0xFF and infolevel!=0, this is a bug. And if
>>> inforeq=0, this condition is never true.
>>
>> There is a bug here, but it's not what you're explaining.
>> info->infolevel is |= to the new inforeq flags. This makes the and
>> process work UNLESS infolevel is a composite (more than one flag).
>>
>> The real bug is here:
>> - if(info->infolevel & inforeq) {
>> + if(inforeq ^= (info->infolevel & inforeq)) {
>>
>> for example:
>> info->infolevel == 1011
>> inforeq == 0111
>> & result == 0011 (so something is already loaded)
>> ^= result == 0100 (exactly what we want, the missing piece)
>>
Or an equivalent form: if(~infolevel & inforeq) ...
But be careful, because it is not exactly what you want.
You should first use a bitmask to clear the not used bits. For example if
infolevel==0xF and inforeq==infrq_all, you conclude that more info is
needed (I assumed that the 0-3 bits used).
Bye, Nagy Gabor
More information about the pacman-dev
mailing list