Hallvard B Furuseth wrote:
Howard Chu writes:
I think you misunderstood.

No, I wrote too briefly.

No matter what you're actually testing for, there is no way you're going to
get a TRUE result from comparing ( signed 32 bit integer > 0x7fffffff ).

Right, and chop <= (max ber_len_t)/2.3333 so the test is a no-op on
32-bit hosts.  But on 64-bit hosts, chop can be an 8-byte integer
which would require the first byte in the output key to hold 10 bits:
inverse sign bit, 8 more bits (one for each chop byte), final sign bit.

If you simply rewrote the test it would eliminate all ambiguity.

>>If it is actually possible for ( chop * 3 > 0x7fffffff ) then this
>> test won't detect that fact. You need to test for
>>        ( chop > 0x7fffffff / 3 )

The other point being, it saves a multiply; the division is a compile time constant.
--
  -- Howard Chu
  Chief Architect, Symas Corp.  http://www.symas.com
  Director, Highland Sun        http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP     http://www.openldap.org/project/

Reply via email to