summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorume <ume@FreeBSD.org>2005-05-15 20:15:15 +0000
committerume <ume@FreeBSD.org>2005-05-15 20:15:15 +0000
commit7a6cd620d08df24bc7c27e2a13017a1f63f004b2 (patch)
tree309b5291b90b8bac584d010fde9db8ed4db9a767 /lib
parentdd14237cdafb5e0124ab3277ac0ac8f9eaf03aa0 (diff)
downloadFreeBSD-src-7a6cd620d08df24bc7c27e2a13017a1f63f004b2.zip
FreeBSD-src-7a6cd620d08df24bc7c27e2a13017a1f63f004b2.tar.gz
- The ai_addrlen of a struct addrinfo used to be a size_t, per
RFC 2553. In XNS5.2, and subsequently in POSIX-2001 and RFC 3493, it was changed to a socklen_t. And, the n_net of a struct netent used to be an unsigned long integer. In XNS5, and subsequently in POSIX-2001, it was changed to an uint32_t. To accomodate for this while preserving ABI compatibility with the old interface, we need to prepend or append 32 bits of padding, depending on the (LP64) architecture's endianness. - Correct 1st argument of getnetbyaddr() to uint32_t on 32 bit arch. Stay as is on 64 bit arch for ABI backward compatibility for now. Reviewed by: das, peter MFC after: 2 weeks
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/net/getaddrinfo.c5
-rw-r--r--lib/libc/net/getnetbydns.c20
-rw-r--r--lib/libc/net/getnetbyht.c7
-rw-r--r--lib/libc/net/getnetbynis.c11
-rw-r--r--lib/libc/net/getnetnamadr.c11
-rw-r--r--lib/libc/net/netdb_private.h8
6 files changed, 37 insertions, 25 deletions
diff --git a/lib/libc/net/getaddrinfo.c b/lib/libc/net/getaddrinfo.c
index a7ab128..5d6ca2f 100644
--- a/lib/libc/net/getaddrinfo.c
+++ b/lib/libc/net/getaddrinfo.c
@@ -135,7 +135,7 @@ TAILQ_HEAD(policyhead, policyqueue);
static const struct afd {
int a_af;
int a_addrlen;
- int a_socklen;
+ socklen_t a_socklen;
int a_off;
const char *a_addrany;
const char *a_loopback;
@@ -1352,6 +1352,9 @@ get_ai(pai, afd, addr)
memset(ai->ai_addr, 0, (size_t)afd->a_socklen);
ai->ai_addr->sa_len = afd->a_socklen;
ai->ai_addrlen = afd->a_socklen;
+#if __LONG_BIT == 64
+ ai->__ai_pad0 = 0; /* ABI compatibility */
+#endif
ai->ai_addr->sa_family = ai->ai_family = afd->a_af;
p = (char *)(void *)(ai->ai_addr);
#ifdef FAITH
diff --git a/lib/libc/net/getnetbydns.c b/lib/libc/net/getnetbydns.c
index e4f0ae8..5eca268 100644
--- a/lib/libc/net/getnetbydns.c
+++ b/lib/libc/net/getnetbydns.c
@@ -259,6 +259,9 @@ getnetanswer(querybuf *answer, int anslen, int net_i, struct netent *ne,
break;
}
ne->n_aliases++;
+#if __LONG_BIT == 64
+ ne->__n_pad0 = 0; /* ABI compatibility */
+#endif
return 0;
}
h_errno = TRY_AGAIN;
@@ -268,7 +271,7 @@ getnetanswer(querybuf *answer, int anslen, int net_i, struct netent *ne,
int
_dns_getnetbyaddr(void *rval, void *cb_data, va_list ap)
{
- unsigned long net;
+ uint32_t net;
int net_type;
struct netent *ne;
struct netent_data *ned;
@@ -276,9 +279,9 @@ _dns_getnetbyaddr(void *rval, void *cb_data, va_list ap)
int nn, anslen, error;
querybuf *buf;
char qbuf[MAXDNAME];
- unsigned long net2;
+ uint32_t net2;
- net = va_arg(ap, unsigned long);
+ net = va_arg(ap, uint32_t);
net_type = va_arg(ap, int);
ne = va_arg(ap, struct netent *);
ned = va_arg(ap, struct netent_data *);
@@ -327,12 +330,13 @@ _dns_getnetbyaddr(void *rval, void *cb_data, va_list ap)
error = getnetanswer(buf, anslen, BYADDR, ne, ned);
free(buf);
if (error == 0) {
- unsigned u_net = net; /* maybe net should be unsigned ? */
-
/* Strip trailing zeros */
- while ((u_net & 0xff) == 0 && u_net != 0)
- u_net >>= 8;
- ne->n_net = u_net;
+ while ((net & 0xff) == 0 && net != 0)
+ net >>= 8;
+ ne->n_net = net;
+#if __LONG_BIT == 64
+ ne->__n_pad0 = 0; /* ABI compatibility */
+#endif
return NS_SUCCESS;
}
return NS_NOTFOUND;
diff --git a/lib/libc/net/getnetbyht.c b/lib/libc/net/getnetbyht.c
index fb6ee4d..f4dcd98 100644
--- a/lib/libc/net/getnetbyht.c
+++ b/lib/libc/net/getnetbyht.c
@@ -122,6 +122,9 @@ again:
if (p != NULL)
*p++ = '\0';
ne->n_net = inet_network(cp);
+#if __LONG_BIT == 64
+ ne->__n_pad0 = 0; /* ABI compatibility */
+#endif
ne->n_addrtype = AF_INET;
q = ne->n_aliases = ned->net_aliases;
if (p != NULL) {
@@ -191,13 +194,13 @@ found:
int
_ht_getnetbyaddr(void *rval, void *cb_data, va_list ap)
{
- unsigned long net;
+ uint32_t net;
int type;
struct netent *ne;
struct netent_data *ned;
int error;
- net = va_arg(ap, unsigned long);
+ net = va_arg(ap, uint32_t);
type = va_arg(ap, int);
ne = va_arg(ap, struct netent *);
ned = va_arg(ap, struct netent_data *);
diff --git a/lib/libc/net/getnetbynis.c b/lib/libc/net/getnetbynis.c
index 4725cfb..70785ac 100644
--- a/lib/libc/net/getnetbynis.c
+++ b/lib/libc/net/getnetbynis.c
@@ -99,6 +99,9 @@ _getnetbynis(const char *name, char *map, int af, struct netent *ne,
cp++;
ne->n_net = inet_network(cp);
+#if __LONG_BIT == 64
+ ne->__n_pad0 = 0; /* ABI compatibility */
+#endif
ne->n_addrtype = AF_INET;
q = ne->n_aliases = ned->net_aliases;
@@ -149,22 +152,22 @@ _nis_getnetbyname(void *rval, void *cb_data, va_list ap)
}
-int
+int
_nis_getnetbyaddr(void *rval, void *cb_data, va_list ap)
{
#ifdef YP
- unsigned long addr;
+ uint32_t addr;
int af;
struct netent *ne;
struct netent_data *ned;
char *str, *cp;
- unsigned long net2;
+ uint32_t net2;
int nn;
unsigned int netbr[4];
char buf[MAXDNAME];
int error;
- addr = va_arg(ap, unsigned long);
+ addr = va_arg(ap, uint32_t);
af = va_arg(ap, int);
ne = va_arg(ap, struct netent *);
ned = va_arg(ap, struct netent_data *);
diff --git a/lib/libc/net/getnetnamadr.c b/lib/libc/net/getnetnamadr.c
index 7b8aaa6..eb8c9ae 100644
--- a/lib/libc/net/getnetnamadr.c
+++ b/lib/libc/net/getnetnamadr.c
@@ -120,7 +120,8 @@ getnetbyname_r(const char *name, struct netent *ne, struct netent_data *ned)
}
int
-getnetbyaddr_r(u_long addr, int af, struct netent *ne, struct netent_data *ned)
+getnetbyaddr_r(uint32_t addr, int af, struct netent *ne,
+ struct netent_data *ned)
{
int rval;
@@ -164,13 +165,17 @@ getnetbyname(const char *name)
}
struct netent *
-getnetbyaddr(u_long addr, int af)
+#if __LONG_BIT == 64
+getnetbyaddr(u_long addr, int af) /* ABI compatibility */
+#else
+getnetbyaddr(uint32_t addr, int af)
+#endif
{
struct netdata *nd;
if ((nd = __netdata_init()) == NULL)
return NULL;
- if (getnetbyaddr_r(addr, af, &nd->net, &nd->data) != 0)
+ if (getnetbyaddr_r((uint32_t)addr, af, &nd->net, &nd->data) != 0)
return NULL;
return &nd->net;
}
diff --git a/lib/libc/net/netdb_private.h b/lib/libc/net/netdb_private.h
index e5a55ec..0b32780 100644
--- a/lib/libc/net/netdb_private.h
+++ b/lib/libc/net/netdb_private.h
@@ -28,14 +28,8 @@
#ifndef _NETDB_PRIVATE_H_
#define _NETDB_PRIVATE_H_
-#include <sys/_types.h>
#include <stdio.h> /* XXX: for FILE */
-#ifndef _UINT32_T_DECLARED
-typedef __uint32_t uint32_t;
-#define _UINT32_T_DECLARED
-#endif
-
#define _MAXALIASES 35
#define _MAXLINELEN 1024
#define _MAXADDRS 35
@@ -155,7 +149,7 @@ int gethostbyname_r(const char *, struct hostent *, struct hostent_data *);
int gethostbyname2_r(const char *, int, struct hostent *,
struct hostent_data *);
int gethostent_r(struct hostent *, struct hostent_data *);
-int getnetbyaddr_r(unsigned long addr, int af, struct netent *,
+int getnetbyaddr_r(uint32_t addr, int af, struct netent *,
struct netent_data *);
int getnetbyname_r(const char *, struct netent *, struct netent_data *);
int getnetent_r(struct netent *, struct netent_data *);
OpenPOWER on IntegriCloud