mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-17 15:27:36 +00:00
- Remove padding for ABI compatibility of n_net member from struct
netent. - Change 1st argument of getnetbyaddr() to an uint32_t on 64 bit arch as well to confirm to POSIX-2001. These changes break ABI compatibility on 64 bit arch. There is similar padding issue for ai_addrlen of struct addrinfo. However, it is leaved as is for now. Discussed on: arch@, standards@ and current@ X-MFC after: never
This commit is contained in:
parent
8fb36271ea
commit
ad0fab44e2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=146904
@ -105,28 +105,11 @@ struct hostent {
|
||||
#define h_addr h_addr_list[0] /* address, for backward compatibility */
|
||||
};
|
||||
|
||||
/*
|
||||
* Note: n_net 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 binary compatibility with
|
||||
* the old interface, we prepend or append 32 bits of padding,
|
||||
* depending on the (LP64) architecture's endianness.
|
||||
*
|
||||
* This should be deleted the next time the libc major number is
|
||||
* incremented.
|
||||
*/
|
||||
struct netent {
|
||||
char *n_name; /* official name of net */
|
||||
char **n_aliases; /* alias list */
|
||||
int n_addrtype; /* net address type */
|
||||
#if __LONG_BIT == 64 && _BYTE_ORDER == _BIG_ENDIAN
|
||||
uint32_t __n_pad0; /* ABI compatibility */
|
||||
#endif
|
||||
uint32_t n_net; /* network # */
|
||||
#if __LONG_BIT == 64 && _BYTE_ORDER == _LITTLE_ENDIAN
|
||||
uint32_t __n_pad0; /* ABI compatibility */
|
||||
#endif
|
||||
};
|
||||
|
||||
struct servent {
|
||||
@ -262,11 +245,7 @@ struct hostent *gethostbyname2(const char *, int);
|
||||
struct hostent *gethostent(void);
|
||||
struct hostent *getipnodebyaddr(const void *, size_t, int, int *);
|
||||
struct hostent *getipnodebyname(const char *, int, int, int *);
|
||||
#if __LONG_BIT == 64
|
||||
struct netent *getnetbyaddr(unsigned long, int); /* ABI compatibility */
|
||||
#else
|
||||
struct netent *getnetbyaddr(uint32_t, int);
|
||||
#endif
|
||||
struct netent *getnetbyname(const char *);
|
||||
struct netent *getnetent(void);
|
||||
int getnetgrent(char **, char **, char **);
|
||||
|
@ -259,9 +259,6 @@ 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;
|
||||
@ -334,9 +331,6 @@ _dns_getnetbyaddr(void *rval, void *cb_data, va_list ap)
|
||||
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;
|
||||
|
@ -122,9 +122,6 @@ getnetent_r(struct netent *ne, struct netent_data *ned)
|
||||
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) {
|
||||
|
@ -99,9 +99,6 @@ _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;
|
||||
|
@ -165,17 +165,13 @@ getnetbyname(const char *name)
|
||||
}
|
||||
|
||||
struct netent *
|
||||
#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((uint32_t)addr, af, &nd->net, &nd->data) != 0)
|
||||
if (getnetbyaddr_r(addr, af, &nd->net, &nd->data) != 0)
|
||||
return NULL;
|
||||
return &nd->net;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user