Am 13.01.2017 um 15:34 schrieb Henri Verbeet:
On 13 January 2017 at 14:43, Hans Leidekker hans@codeweavers.com wrote:
On Fri, 2017-01-13 at 13:27 +0100, André Hentschel wrote:
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c index 54f7a37..223d980 100644 --- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -1065,6 +1065,13 @@ static ULONG adapterAddressesFromIndex(ULONG family, ULONG flags, IF_INDEX index debugstr_ipv4(&sa->sin_addr.S_un.S_addr, addr_buf)); fill_unicast_addr_data(aa, ua);
ua->OnLinkPrefixLength = 0;
for (j = 0; j < sizeof(*v4masks) * 8; j++)
{
if (v4masks[i] & 1 << j) ua->OnLinkPrefixLength++;
else break;
}
Please add a helper to compute prefix length instead of duplicating this code. This should probably wait until the code freeze is over.
For what it's worth, if you're adding a helper function anyway, note that you're really just counting the number of trailing zero-bits. GCC has __builtin_ctz() for that, but even without that there are better approaches than testing each bit individually. Alternatively, there's also __builtin_popcount().
Thank you both for the hints. One thing is that popcount would count all 1s even with 0s in between, whereas this function stops at the first 0. Hans, you wrote it that way, there's no checking if the mask is mangled (0s in between), how should it react to mangled masks?