From 9db6ee8d2fa48ade4451c0de80980b7f242c0f17 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 20 Sep 2002 20:34:06 +0000 Subject: [PATCH] * sysdeps/generic/ifreq.h (__if_nextreq): New function. * sysdeps/unix/sysv/linux/ifreq.h (__if_nextreq): New function. * sysdeps/mach/hurd/ifreq.h (__if_nextreq): New function. * sysdeps/gnu/ifaddrs.c (getifaddrs): Use __if_nextreq for iterating through the list of interfaces. * resolv/res_hconf.c (_res_hconf_reorder_addrs): Likewise. * sysdeps/unix/grantpt.c (pts_name): Set errno when __ptsname_r fails. Reported by Bruno Haible . --- ChangeLog | 12 ++++++++++++ linuxthreads/ChangeLog | 10 ++++++++++ localedata/ChangeLog | 6 ++++++ resolv/res_hconf.c | 2 +- sysdeps/generic/ifreq.h | 7 +++++++ sysdeps/gnu/ifaddrs.c | 10 +++++++--- sysdeps/mach/hurd/ifreq.h | 7 +++++++ sysdeps/unix/grantpt.c | 3 ++- sysdeps/unix/sysv/linux/ifreq.h | 6 ++++++ 9 files changed, 58 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index d694998bb6..dac9eae635 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ +2002-09-17 Bruno Haible + + * sysdeps/generic/ifreq.h (__if_nextreq): New function. + * sysdeps/unix/sysv/linux/ifreq.h (__if_nextreq): New function. + * sysdeps/mach/hurd/ifreq.h (__if_nextreq): New function. + * sysdeps/gnu/ifaddrs.c (getifaddrs): Use __if_nextreq + for iterating through the list of interfaces. + * resolv/res_hconf.c (_res_hconf_reorder_addrs): Likewise. + 2002-09-20 Roland McGrath + * sysdeps/unix/grantpt.c (pts_name): Set errno when __ptsname_r fails. + Reported by Bruno Haible . + * sysdeps/unix/bsd/bsd4.4/isatty.c: New file. * sysdeps/unix/bsd/isatty.c (__isatty): Don't save and restore errno. diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 40913b630b..28eebd2256 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,13 @@ +2002-09-18 Bruno Haible + + * Examples/ex10.c (thread): Fail if pthread_mutex_timedlock() returns + an unexpected error code. + + * internals.h (__pthread_message): Add const to first parameter type. + * pthread.c (__pthread_message): Likewise. + + * sysdeps/unix/sysv/linux/configure: Moved to ../sysdeps/pthread. + 2002-09-17 Roland McGrath * sysdeps/i386/tls.h (TLS_DO_MODIFY_LDT, TLS_DO_SET_THREAD_AREA): diff --git a/localedata/ChangeLog b/localedata/ChangeLog index d31e094f32..a6de7470b6 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,9 @@ +2002-09-20 Roland McGrath + + * gen-locale.sh (generate_locale): Clean up overly baroque sh syntax. + Touch the LC_CTYPE file of the output after a successful run. + Reported by Bruno Haible . + 2002-09-10 Ulrich Drepper * localedata/locales/bg_BG: Update LC_IDENTIFICATION info. diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c index b814f62dd3..8da2727a79 100644 --- a/resolv/res_hconf.c +++ b/resolv/res_hconf.c @@ -556,7 +556,7 @@ _res_hconf_reorder_addrs (struct hostent *hp) goto cleanup1; /* Copy usable interfaces in ifaddrs structure. */ - for (cur_ifr = ifr, i = 0; i < num; ++cur_ifr, ++i) + for (cur_ifr = ifr, i = 0; i < num; cur_ifr = __if_nextreq (cur_ifr), ++i) { if (cur_ifr->ifr_addr.sa_family != AF_INET) continue; diff --git a/sysdeps/generic/ifreq.h b/sysdeps/generic/ifreq.h index f750065cd3..0d975be61c 100644 --- a/sysdeps/generic/ifreq.h +++ b/sysdeps/generic/ifreq.h @@ -73,6 +73,13 @@ __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd) } +static inline struct ifreq * +__if_nextreq (struct ifreq *ifr) +{ + return ifr + 1; +} + + static inline void __if_freereq (struct ifreq *ifreqs, int num_ifs) { diff --git a/sysdeps/gnu/ifaddrs.c b/sysdeps/gnu/ifaddrs.c index e0a5b424f0..0c1ae5bf05 100644 --- a/sysdeps/gnu/ifaddrs.c +++ b/sysdeps/gnu/ifaddrs.c @@ -40,7 +40,7 @@ getifaddrs (struct ifaddrs **ifap) Some different mechanism entirely must be used for IPv6. */ int fd = __socket (AF_INET, SOCK_DGRAM, 0); struct ifreq *ifreqs; - int nifs, i; + int nifs; if (fd < 0) return -1; @@ -64,6 +64,8 @@ getifaddrs (struct ifaddrs **ifap) struct sockaddr addr, netmask, broadaddr; char name[IF_NAMESIZE]; } *storage; + struct ifreq *ifr; + int i; storage = malloc (nifs * sizeof storage[0]); if (storage == NULL) @@ -74,10 +76,9 @@ getifaddrs (struct ifaddrs **ifap) } i = 0; + ifr = ifreqs; do { - struct ifreq *const ifr = &ifreqs[i]; - /* Fill in all pointers to the storage we've already allocated. */ storage[i].ia.ifa_next = &storage[i + 1].ia; storage[i].ia.ifa_addr = &storage[i].addr; @@ -97,6 +98,7 @@ getifaddrs (struct ifaddrs **ifap) storage[i].ia.ifa_flags = ifr->ifr_flags; ifr->ifr_addr = storage[i].addr; + if (__ioctl (fd, SIOCGIFNETMASK, ifr) < 0) break; storage[i].netmask = ifr->ifr_netmask; @@ -121,6 +123,7 @@ getifaddrs (struct ifaddrs **ifap) storage[i].ia.ifa_data = NULL; /* Nothing here for now. */ + ifr = __if_nextreq (ifr); } while (++i < nifs); if (i < nifs) /* Broke out early on error. */ { @@ -129,6 +132,7 @@ getifaddrs (struct ifaddrs **ifap) __if_freereq (ifreqs, nifs); return -1; } + storage[i - 1].ia.ifa_next = NULL; *ifap = &storage[0].ia; diff --git a/sysdeps/mach/hurd/ifreq.h b/sysdeps/mach/hurd/ifreq.h index f2143d8c70..77f0b9cac0 100644 --- a/sysdeps/mach/hurd/ifreq.h +++ b/sysdeps/mach/hurd/ifreq.h @@ -66,6 +66,13 @@ __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd) } +static inline struct ifreq * +__if_nextreq (struct ifreq *ifr) +{ + return ifr + 1; +} + + static inline void __if_freereq (struct ifreq *ifreqs, int num_ifs) { diff --git a/sysdeps/unix/grantpt.c b/sysdeps/unix/grantpt.c index 5f27ce91e3..98d601cf67 100644 --- a/sysdeps/unix/grantpt.c +++ b/sysdeps/unix/grantpt.c @@ -55,7 +55,8 @@ pts_name (int fd, char **pts, size_t buf_len) /* ptsname_r returns with ENOTTY to indicate a descriptor not referring to a pty master. For this condition, grantpt must return EINVAL. */ - errno = EINVAL; + rv = EINVAL; + errno = rv; /* Not necessarily set by __ptsname_r. */ break; } diff --git a/sysdeps/unix/sysv/linux/ifreq.h b/sysdeps/unix/sysv/linux/ifreq.h index 9d42664444..f498e5c32a 100644 --- a/sysdeps/unix/sysv/linux/ifreq.h +++ b/sysdeps/unix/sysv/linux/ifreq.h @@ -105,6 +105,12 @@ __ifreq (struct ifreq **ifreqs, int *num_ifs, int sockfd) *ifreqs = realloc (ifc.ifc_buf, nifs * sizeof (struct ifreq)); } +static inline struct ifreq * +__if_nextreq (struct ifreq *ifr) +{ + return ifr + 1; +} + static inline void __if_freereq (struct ifreq *ifreqs, int num_ifs) { -- 2.11.4.GIT