[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