* net.cc (if_nametoindex): Free IP_ADAPTER_ADDRESSES memory.

(if_indextoname): Ditto.
	(if_nameindex): Ditto.  Remove duplicate indexed entries in result.
This commit is contained in:
Corinna Vinschen 2007-01-23 09:23:54 +00:00
parent bff4389137
commit 4b13fd15d4
2 changed files with 40 additions and 19 deletions

View File

@ -1,3 +1,9 @@
2007-01-23 Corinna Vinschen <corinna@vinschen.de>
* net.cc (if_nametoindex): Free IP_ADAPTER_ADDRESSES memory.
(if_indextoname): Ditto.
(if_nameindex): Ditto. Remove duplicate indexed entries in result.
2007-01-21 Corinna Vinschen <corinna@vinschen.de>
* autoload.cc (WSAIoctl): Define.

View File

@ -2092,6 +2092,7 @@ extern "C" unsigned
if_nametoindex (const char *name)
{
PIP_ADAPTER_ADDRESSES pap = NULL;
unsigned index = 0;
myfault efault;
if (efault.faulted (EFAULT))
@ -2108,15 +2109,20 @@ if_nametoindex (const char *name)
*c = '\0';
for (; pap; pap = pap->Next)
if (strcasematch (lname, pap->AdapterName))
return pap->IfIndex;
{
index = pap->IfIndex;
break;
}
return 0;
free (pap);
}
return index;
}
extern "C" char *
if_indextoname (unsigned ifindex, char *ifname)
{
PIP_ADAPTER_ADDRESSES pap = NULL;
char *name = NULL;
myfault efault;
if (efault.faulted (EFAULT))
@ -2128,12 +2134,14 @@ if_indextoname (unsigned ifindex, char *ifname)
for (; pap; pap = pap->Next)
if (ifindex == pap->IfIndex)
{
strcpy (ifname, pap->AdapterName);
return ifname;
name = strcpy (ifname, pap->AdapterName);
break;
}
free (pap);
}
else
set_errno (ENXIO);
return NULL;
return name;
}
extern "C" struct if_nameindex *
@ -2157,22 +2165,29 @@ if_nameindex (void)
malloc ((cnt + 1) * sizeof (struct if_nameindex)
+ cnt * IF_NAMESIZE);
if (!iflist)
{
set_errno (ENOBUFS);
return NULL;
}
ifnamelist = (char (*)[IF_NAMESIZE]) (iflist + cnt + 1);
for (pap = pa0, cnt = 0; pap; pap = pap->Next, ++cnt)
else
{
ifnamelist = (char (*)[IF_NAMESIZE]) (iflist + cnt + 1);
for (pap = pa0, cnt = 0; pap; pap = pap->Next)
{
for (int i = 0; i < cnt; ++i)
if (iflist[i].if_index == (pap->IfIndex ?: pap->Ipv6IfIndex))
goto outer_loop;
iflist[cnt].if_index = pap->IfIndex ?: pap->Ipv6IfIndex;
strcpy (iflist[cnt].if_name = ifnamelist[cnt], pap->AdapterName);
++cnt;
outer_loop:
;
}
iflist[cnt].if_index = 0;
iflist[cnt].if_name = NULL;
return iflist;
}
free (pa0);
}
else
set_errno (ENXIO);
return NULL;
return iflist;
}
extern "C" void