On 12/02, Laurent Bercot wrote: > > src/libunixonacid/textclient_server_init_fromsocket.c:56:3: warning: > > dereferencing type-punned pointer will break strict-aliasing rules > > [-Wstrict-aliasing] > > *(int *)CMSG_DATA(c) = fd[1] ; > > ^ > > Yeah, some compilers actually print that warning. > It's annoying, because this is the official way, and really the only way, > of using CMSG_DATA(). It breaks strict aliasing, but it's okay, because > in the case of SCM_RIGHTS transmission, nothing ever uses CMSG_DATA(c) as > an array of unsigned char; it's always written and read as an array of > ints, and holds file descriptors. > Honestly, the spec of CMSG_DATA() is to blame: it should be void *, or > at the very least, char *. Making it unsigned char * was really > short-sighted, and the root cause for the strict aliasing violation. > > I don't want to "fix" this in my code, because the code as it is written > is as clear as can be. A "fix" would imply a double cast through void *, > which would decrease readability - not a good trade for two spurious > compiler warnings.
OK, sounds good! Thanks! Lewis
