On Tue, Mar 31, 2020 at 11:24 PM Martin Pieuchot <[email protected]> wrote:
> The current form of EV_SET(2) declares a `kevp' variable. This can
> cause to subtle bugs hard to discover if one uses a variable of the
> same to retrieve events.
>
> Diff below prefixes the locally declared variable by an underscore,
> like it it done in FD_ZERO(), which should be good enough to prevent
> surprises.
>
> Is it the right way to correct such issue? How many underscores are
> enough? Can the standards gurus tell me?
>
tl;dr: this should use a variable that starts with either two underbars
(__kevp) or an underbar and a capital (_Kevp). The same is true of
FD_ZERO().
The namespace of identifiers that begin with a single underbar is only
"reserved for use as identifiers with file scope in both the ordinary and
tag name spaces". That means it's perfectly legal for an application to
declare a *local* variable with such a name. So, this should be legal:
#include <sys/types.h>
#include <sys/event.h>
#include <sys/time.h>
#include <sys/select.h>
int main(void)
{
struct fd_set _p;
struct kevent _kevp;
FD_ZERO(&_p):
EV_SET(&_kevp, 0, 0, 0, 0, 0, 0);
return 0;
}
...but it currently blows up on the FD_ZERO() and would blow up in the
EV_SET() with your proposed diff.
Philip Guenther