提交 32055d52 编写于 作者: D Daniel Sabogal 提交者: Rich Felker

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.
上级 3848a99f
......@@ -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);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册