[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