On Wed, 28 Feb 2007, Aaron Griffin wrote:
On 2/28/07, Aaron Griffin <aaronmgriffin@gmail.com> wrote:
On 2/28/07, Nagy Gabor <ngaba@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