aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv')
-rw-r--r--sysdeps/unix/sysv/linux/if_index.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c
index 9922cedf43..76349bd96d 100644
--- a/sysdeps/unix/sysv/linux/if_index.c
+++ b/sysdeps/unix/sysv/linux/if_index.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997,98,99,2000,2002,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997,98,99,2000,2002,2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -211,18 +211,26 @@ if_indextoname (unsigned int ifindex, char *ifname)
close_not_cancel_no_status (fd);
-# if __ASSUME_SIOCGIFNAME == 0
if (status < 0)
{
+# if __ASSUME_SIOCGIFNAME == 0
if (errno == EINVAL)
siocgifname_works_not = 1; /* Don't make the same mistake twice. */
+ else
+# endif
+ {
+ if (errno == ENODEV)
+ /* POSIX requires ENXIO. */
+ __set_errno (ENXIO);
+
+ return NULL;
+ }
}
else
return strncpy (ifname, ifr.ifr_name, IFNAMSIZ);
+# if __ASSUME_SIOCGIFNAME == 0
__set_errno (serrno);
-# else
- return status < 0 ? NULL : strncpy (ifname, ifr.ifr_name, IFNAMSIZ);
# endif
}
# endif
@@ -240,6 +248,9 @@ if_indextoname (unsigned int ifindex, char *ifname)
}
if_freenameindex (idx);
+
+ if (result == NULL)
+ __set_errno (ENXIO);
}
return result;
# endif