[Issue 24404] The names of the union fields in Linux's ifaddrs are named incorrectly.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Feb 23 07:53:35 UTC 2024
https://issues.dlang.org/show_bug.cgi?id=24404
Dlang Bot <dlang-bot at dlang.rocks> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |pull
--- Comment #2 from Dlang Bot <dlang-bot at dlang.rocks> ---
@jmdavis created dlang/dmd pull request #16233 "Fix Bugzilla issue 24404 -
ifaddrs union fields incorrectly name on Linux." fixing this issue:
- Fix Bugzilla issue 24404 - ifaddrs union fields incorrectly name on Linux.
You can see the correct declaration for ifaddrs on Linux here:
https://www.man7.org/linux/man-pages/man3/getifaddrs.3.html
What the fields are supposed to be named is ifa_broadaddr and
ifa_dstaddr. However, because Linux defines them using a union, it gives
them different names within the union - ifu_broadaddr and ifu_dstaddr -
and then #defines the proper names to access the union names.
What druntime did was use the union names - and then incorrectly name
ifu_dtsaddr as if_dstaddr. So, it was doubly wrong for that field.
The two approaches that we could take here would be to either
1. Turn the union into a type so that we could have an ifa_ifu field to
allow accessing the ifu_* names that way - as is technically possible
in C - and then add wrapper functions with the ifa_* names (since we
couldn't use an alias to access members of the union member
variable).
2. Just rename the fields to ifa_* and ignore the fact that you can
technically access the ifu_* fields via the union name in C.
The simpler approach is #2, so that's what this commit does. I'm pretty
sure that the ability to access the ifu_* fields via the union name is
just an implementation detail - particularly since other platforms just
declare the ifa_* names without using a union at all.
Either way, deprecated aliases are provided so that existing code
doesn't break.
https://github.com/dlang/dmd/pull/16233
--
More information about the Digitalmars-d-bugs
mailing list