lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Mon, Nov 9, 2020 at 5:53 PM Ranier Vilela <> wrote:
> Em seg., 9 de nov. de 2020 às 13:48, Luiz Henrique de Figueiredo <> escreveu:
>> > -  for (i=0; i < LUA_NUMTAGS; i++) g->mt[i] = NULL;
>> > +  memset(g->mt, 0, sizeof(struct Table *) * (size_t) LUA_NUMTAGS);
>> No. The C standard says that NULL does not need to have all bits zero.
> Change 0 by NULL, after the memset, the memory has the same content.
> -  for (i=0; i < LUA_NUMTAGS; i++) g->mt[i] = NULL;
> +  memset(g->mt, NULL, sizeof(struct Table *) * (size_t) LUA_NUMTAGS);
> Internally, memset has its own loop, but this is very highly optimized for the platform used.

The second parameter to memset is an int. NULL must cast to 0 as an
int. But using it there is grossly missleanding.

OTOH, what Luis tries to tell you is that NULL can be represented as
something different than a 0 filled byte array. As long as it cast to
0 everything is fine.

Granted, all the platforms I've used use an all-zeroes representation,
but lua does not have the luxury of assuming that.

Francisco Olarte.