fix if_indextoname error case

posix requires errno to be set to ENXIO if the interface does not exist.
linux returns ENODEV instead so we handle this.
This commit is contained in:
Daniel Sabogal 2016-09-15 11:27:30 -04:00 committed by Rich Felker
parent 3848a99f65
commit 32055d52ca
1 changed files with 6 additions and 1 deletions

View File

@ -3,6 +3,7 @@
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <string.h>
#include <errno.h>
#include "syscall.h"
char *if_indextoname(unsigned index, char *name)
@ -14,5 +15,9 @@ char *if_indextoname(unsigned index, char *name)
ifr.ifr_ifindex = index;
r = ioctl(fd, SIOCGIFNAME, &ifr);
__syscall(SYS_close, fd);
return r < 0 ? 0 : strncpy(name, ifr.ifr_name, IF_NAMESIZE);
if (r < 0) {
if (errno == ENODEV) errno = ENXIO;
return 0;
}
return strncpy(name, ifr.ifr_name, IF_NAMESIZE);
}