Incorrect _Kmax value
Fri Feb 11 14:51:00 GMT 2011
On Thu, 2011-02-10 at 18:32 +0100, Corinna Vinschen wrote:
> On Feb 10 19:04, Aleksandr Platonov wrote:
> > Hi,
> > _Kmax is defined as (sizeof (size_t) << 3) and means the maximum
> > value of _REENT->_freelist array.
> > If the size of size_t is equal to 4 then Balloc(prt, _Kmax - 1) call
> > sets _maxwds to negative value. Balloc(ptr, _Kmax) call allocates
> > for sizeof (_Bigint) - sizeof(rv->_x) bytes and sets _maxwds to 0.
> When, where and why should this happen?
I do not know when Balloc() could be called with k parameter equal to 31
or 32. But if this should *not* happen then why do we allocate 33 (_Kmax
+ 1) _Bigint pointers for _REENT->_freelist array at the first Balloc()
call? In this case the last two elements of _REENT->_freelist will be
And if this could happen then Balloc() works incorrect as I described at
the first message.
> The definitions and the code in question is BSD code which is used,
> for instance, in NetBSD as well. The definition of _Kmax is the
> same, too.
> > So, it seems that _Kmax value is too big and should be (sizeof
> > << 3) - 2 or less.
> Please provide a simple testcase which allows to reproduce the
More information about the Newlib