Overview
Comment: | +[OFSystemInfo networkInterfaces]: Avoid IfIndex
It turns out it is not unique, resulting in two adapters being merged |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
abe3ccd61e21011a341e66bcc10e0047 |
User & Date: | js on 2024-01-20 15:18:15 |
Other Links: | manifest | tags |
Context
2024-01-20
| ||
21:40 | Add support for LOC DNS resource records check-in: d37c636a61 user: js tags: trunk | |
15:18 | +[OFSystemInfo networkInterfaces]: Avoid IfIndex check-in: 0a6eddb5bc user: js tags: 1.0 | |
15:18 | +[OFSystemInfo networkInterfaces]: Avoid IfIndex check-in: abe3ccd61e user: js tags: trunk | |
14:59 | Fix compilation with old MinGW versions check-in: d077c31c5c user: js tags: trunk | |
Changes
Modified src/platform/Windows/OFSystemInfo+NetworkInterfaces.m from [42cc58d3b5] to [f40e21866b].
︙ | ︙ | |||
38 39 40 41 42 43 44 | { HMODULE module; if ((module = GetModuleHandle("iphlpapi.dll")) != NULL) GetAdaptersAddressesFuncPtr = (WINAPI ULONG (*)(ULONG, ULONG, PVOID, PIP_ADAPTER_ADDRESSES, PULONG)) GetProcAddress(module, "GetAdaptersAddresses"); | < > | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | { HMODULE module; if ((module = GetModuleHandle("iphlpapi.dll")) != NULL) GetAdaptersAddressesFuncPtr = (WINAPI ULONG (*)(ULONG, ULONG, PVOID, PIP_ADAPTER_ADDRESSES, PULONG)) GetProcAddress(module, "GetAdaptersAddresses"); } static OFMutableDictionary OF_GENERIC(OFString *, OFNetworkInterface) * networkInterfacesFromGetAdaptersAddresses(void) { OFMutableDictionary *ret = [OFMutableDictionary dictionary]; ULONG adapterAddressesSize = sizeof(IP_ADAPTER_ADDRESSES); PIP_ADAPTER_ADDRESSES adapterAddresses; if ((adapterAddresses = malloc(adapterAddressesSize)) == NULL) return nil; @try { OFStringEncoding encoding = [OFLocale encoding]; ULONG error = GetAdaptersAddressesFuncPtr(AF_UNSPEC, 0, NULL, adapterAddresses, &adapterAddressesSize); if (error == ERROR_BUFFER_OVERFLOW) { PIP_ADAPTER_ADDRESSES newAdapterAddresses = realloc(adapterAddresses, adapterAddressesSize); |
︙ | ︙ | |||
76 77 78 79 80 81 82 | for (PIP_ADAPTER_ADDRESSES iter = adapterAddresses; iter != NULL; iter = iter->Next) { OFString *name; OFMutableDictionary *interface; OFNumber *index; | | | | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | for (PIP_ADAPTER_ADDRESSES iter = adapterAddresses; iter != NULL; iter = iter->Next) { OFString *name; OFMutableDictionary *interface; OFNumber *index; name = [OFString stringWithCString: iter->AdapterName encoding: encoding]; if ((interface = [ret objectForKey: name]) == nil) { interface = [OFMutableDictionary dictionary]; [ret setObject: interface forKey: name]; } index = [OFNumber numberWithUnsignedInt: iter->IfIndex]; |
︙ | ︙ |