| 
 |   
| version 1.10.10.2, 2014/11/17 22:38:09 | version 1.10.10.3, 2014/11/17 23:00:36 | 
|---|---|
| Line 491 e_get1stiface(char *szIface, int iflen) | Line 491 e_get1stiface(char *szIface, int iflen) | 
| freeifaddrs(ifa); | freeifaddrs(ifa); | 
| return 0; | return 0; | 
| } | } | 
| /* | |
| * e_getifacebyname() - Get interface and make network structure | |
| * | |
| * @psIface = Interface, if =NULL first interface | |
| * @addr = Network address structure | |
| * return: NULL error or !=NULL network structure | |
| */ | |
| sockaddr_t * | |
| e_getifacebyname(const char *psIface, sockaddr_t * __restrict addr) | |
| { | |
| char szIface[64] = { [0 ... 63] = 0 }; | |
| struct ifaddrs *p, *ifa = NULL; | |
| if (!addr) | |
| return NULL; | |
| memset(addr, 0, sizeof(sockaddr_t)); | |
| getifaddrs(&ifa); | |
| strlcpy(szIface, psIface ? psIface : ifa->ifa_name, sizeof szIface); | |
| for (p = ifa; p && p->ifa_name; p++) | |
| if (p->ifa_name && !strcmp(p->ifa_name, szIface) && p->ifa_addr && | |
| p->ifa_addr->sa_family == AF_LINK) { | |
| memcpy(&addr->sdl, p->ifa_addr, sizeof(struct sockaddr_dl)); | |
| break; | |
| } | |
| freeifaddrs(ifa); | |
| return addr; | |
| } |