On Fri, Aug 05, 2022 at 08:08:17AM -0600, Theo de Raadt wrote: > I struggle to see any value of this concept: If you put a cast in-line > in the code, as a coder you can know what it means. But if you abstract > the typecast to some function in a header file, how do you remember > that it only does a typecast, and doesn't do something else? I think this > is a foolish abstraction without value.
satosin(), sin6tosa(), etc. are convenient helpers to avoid manually casting all over the place. struct sockaddr aka. sa, struct sockaddr_in6 aka. sin6, etc. are well known abbreviations in networking code. I argue you can't get familiar with networking code without knowing what these mean, so you remember them because they are so commonly used. Imho, the same can apply to *toc*(). Alternatively, we can expand usages of existing *to*() calls into plain casts and add const where required to constify functions, but that seems like a step backward to me as it makes code overly verbose.
