diff --git a/src/libCom/osi/os/Linux/osdSock.h b/src/libCom/osi/os/Linux/osdSock.h index 121456783..b3e6b1cf2 100644 --- a/src/libCom/osi/os/Linux/osdSock.h +++ b/src/libCom/osi/os/Linux/osdSock.h @@ -76,5 +76,7 @@ typedef socklen_t osiSocklen_t; #define SD_BOTH 2 #endif +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/LynxOS/osdSock.h b/src/libCom/osi/os/LynxOS/osdSock.h index 70cffb455..16af8ca4b 100644 --- a/src/libCom/osi/os/LynxOS/osdSock.h +++ b/src/libCom/osi/os/LynxOS/osdSock.h @@ -71,5 +71,7 @@ typedef int osiSocklen_t; #define INADDR_LOOPBACK 0x7F000001 +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/RTEMS/osdSock.h b/src/libCom/osi/os/RTEMS/osdSock.h index ade719658..3bfa2e4dc 100644 --- a/src/libCom/osi/os/RTEMS/osdSock.h +++ b/src/libCom/osi/os/RTEMS/osdSock.h @@ -78,6 +78,6 @@ int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, st /* * Ensure that we get the right network code in default/osdNetIntf.c. */ -#define SOCKADDR_HAS_LEN 1 +#define ifreq_size(pifreq) (pifreq->ifr_addr.sa_len + sizeof(pifreq->ifr_name)) #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/VMS/osdSock.h b/src/libCom/osi/os/VMS/osdSock.h index 1ed824082..ae63880d1 100644 --- a/src/libCom/osi/os/VMS/osdSock.h +++ b/src/libCom/osi/os/VMS/osdSock.h @@ -161,5 +161,7 @@ typedef int osiSocklen_t; # define FD_IN_FDSET(FD) ((FD)=0) #endif +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/alpha/osdSock.h b/src/libCom/osi/os/alpha/osdSock.h index 4d176036d..1e661e7df 100644 --- a/src/libCom/osi/os/alpha/osdSock.h +++ b/src/libCom/osi/os/alpha/osdSock.h @@ -66,5 +66,7 @@ typedef int osiSocklen_t; #define SOCK_ENOTSOCK ENOTSOCK #define SOCK_EBADF EBADF +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/cygwin32/osdSock.h b/src/libCom/osi/os/cygwin32/osdSock.h index 660259b52..825f0bf73 100644 --- a/src/libCom/osi/os/cygwin32/osdSock.h +++ b/src/libCom/osi/os/cygwin32/osdSock.h @@ -84,5 +84,7 @@ typedef int osiSocklen_t; #define SOCK_ENOTSOCK ENOTSOCK #define SOCK_EBADF EBADF +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/default/osdNetIntf.c b/src/libCom/osi/os/default/osdNetIntf.c index e8bd0ed00..f3a07194a 100644 --- a/src/libCom/osi/os/default/osdNetIntf.c +++ b/src/libCom/osi/os/default/osdNetIntf.c @@ -48,21 +48,19 @@ * Made difficult by the fact that addresses larger than the structure * size may be returned from the kernel. */ -static struct ifreq * -ifreqNext (struct ifreq *pifreq) +static struct ifreq * ifreqNext ( struct ifreq *pifreq ) { - unsigned int size; + size_t size; -#if ( defined (BSD) && ( BSD >= 44 ) ) || defined ( SOCKADDR_HAS_LEN ) - size = pifreq->ifr_addr.sa_len + sizeof(pifreq->ifr_name); - if (size < sizeof(*pifreq)) - size = sizeof(*pifreq); -#else - size = sizeof(*pifreq); -#endif - return (struct ifreq *)(size + (char *)pifreq); + size = ifreq_size ( pifreq ); + if ( size < sizeof ( *pifreq ) ) { + size = sizeof ( *pifreq ); + } + + return ( struct ifreq * )( size + ( char * ) pifreq ); } + /* * osiSockDiscoverBroadcastAddresses () */ diff --git a/src/libCom/osi/os/hpux/osdSock.h b/src/libCom/osi/os/hpux/osdSock.h index c34dea922..890d1d079 100644 --- a/src/libCom/osi/os/hpux/osdSock.h +++ b/src/libCom/osi/os/hpux/osdSock.h @@ -67,5 +67,7 @@ typedef int osiSockIoctl_t; #define SOCK_ENOTSOCK ENOTSOCK #define SOCK_EBADF EBADF +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/sgi/osdSock.h b/src/libCom/osi/os/sgi/osdSock.h index 8eb090f52..075f6c02b 100644 --- a/src/libCom/osi/os/sgi/osdSock.h +++ b/src/libCom/osi/os/sgi/osdSock.h @@ -69,5 +69,7 @@ typedef int osiSocklen_t; #define SOCK_ENOTSOCK ENOTSOCK #define SOCK_EBADF EBADF +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/solaris/osdSock.h b/src/libCom/osi/os/solaris/osdSock.h index a8468d975..84205f835 100644 --- a/src/libCom/osi/os/solaris/osdSock.h +++ b/src/libCom/osi/os/solaris/osdSock.h @@ -71,5 +71,7 @@ typedef int osiSocklen_t; #define SD_BOTH 2 #endif +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/sun4/osdSock.h b/src/libCom/osi/os/sun4/osdSock.h index f1fafb946..9cc4b959b 100644 --- a/src/libCom/osi/os/sun4/osdSock.h +++ b/src/libCom/osi/os/sun4/osdSock.h @@ -132,5 +132,7 @@ typedef int osiSocklen_t; #define SOCK_ENOTSOCK ENOTSOCK #define SOCK_EBADF EBADF +#define ifreq_size(pifreq) (sizeof(pifreq->ifr_name)) + #endif /*osdSockH*/ diff --git a/src/libCom/osi/os/vxWorks/osdSock.h b/src/libCom/osi/os/vxWorks/osdSock.h index 980ebaf63..61ae3614b 100644 --- a/src/libCom/osi/os/vxWorks/osdSock.h +++ b/src/libCom/osi/os/vxWorks/osdSock.h @@ -70,6 +70,12 @@ typedef int osiSocklen_t; #define INADDR_LOOPBACK 0x7F000001 #endif +#if ( defined (BSD) && ( BSD >= 44 ) ) +# define ifreq_size(pifreq) (pifreq->ifr_addr.sa_len + sizeof(pifreq->ifr_name)) +#else +# define ifreq_size(pifreq) sizeof(*pifreq) +#endif + #endif /*osdSockH*/