you will need to fix AMLOP_ONES as well. It does a (char)opcode typecast,
which would be 0xff not 0xffff... if using uint64.

amlop_match, amlop_wait, amlop_acquire, amlop_condref all will need to return
AML_ONES or AML_TRUE

> Date: Sun, 1 Apr 2012 10:45:55 +0300
> From: p...@irofti.net
> To: o...@drijf.net
> CC: tech@openbsd.org; kette...@openbsd.org; chas...@skynet.be;
jor...@openbsd.org
> Subject: Re: aml: Fix integer types to be unsigned
>
> On Sat, Mar 31, 2012 at 05:33:33PM +0200, Otto Moerbeek wrote:
> > On Sat, Mar 31, 2012 at 01:47:18AM +0300, Paul Irofti wrote:
> >
> > > After the report from a few weeks ago I went ahead and fixed most (if
> > > not all) of the signed integer usages in the AML parser.
> > >
> > > Please have a look at this diff, test it thoroughly and comment/okay
it.
> >
> > Some comments inline.
> >
> > > +_aml_setvalue(struct aml_value *lhs, int type, u_int64_t ival, const
void *bval)
> > >  {
> > >   memset(&lhs->_, 0x0, sizeof(lhs->_));
> > >
> > > @@ -923,7 +920,7 @@ _aml_setvalue(struct aml_value *lhs, int
> > >                   memcpy(lhs->v_buffer, bval, ival);
> > >           break;
> > >   case AML_OBJTYPE_STRING:
> > > -         if (ival == -1)
> > > +         if ((signed)ival == -1)
> >
> > Very a-typical way of doing this. Better cast the constant to the
> > target type, that's the comon idiom. (signed) is a shorthand for
> > (signed int) and not (the signed variant of the type). It is very
> > uncommon to use it.
>
> Yes, I had some issues with casting on the other side (which is what I
> tried first). Yes, I know now, that (signed) expands to (signed int).
> Well I think I knew that in the passed but the brain cells holding that
> information must've quit and moved on to a smarter brain.
>
> So the solution, I think, will be to check against (0xffff..ff)
> constants and stop casting.
>
> The problem here was that I got values in ival that were
> 32-bit and also 64-bit versions of -1.

Reply via email to