- 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 */
|
#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 {
|
struct netent {
|
||||||
char *n_name; /* official name of net */
|
char *n_name; /* official name of net */
|
||||||
char **n_aliases; /* alias list */
|
char **n_aliases; /* alias list */
|
||||||
int n_addrtype; /* net address type */
|
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 # */
|
uint32_t n_net; /* network # */
|
||||||
#if __LONG_BIT == 64 && _BYTE_ORDER == _LITTLE_ENDIAN
|
|
||||||
uint32_t __n_pad0; /* ABI compatibility */
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct servent {
|
struct servent {
|
||||||
@ -262,11 +245,7 @@ struct hostent *gethostbyname2(const char *, int);
|
|||||||
struct hostent *gethostent(void);
|
struct hostent *gethostent(void);
|
||||||
struct hostent *getipnodebyaddr(const void *, size_t, int, int *);
|
struct hostent *getipnodebyaddr(const void *, size_t, int, int *);
|
||||||
struct hostent *getipnodebyname(const char *, int, 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);
|
struct netent *getnetbyaddr(uint32_t, int);
|
||||||
#endif
|
|
||||||
struct netent *getnetbyname(const char *);
|
struct netent *getnetbyname(const char *);
|
||||||
struct netent *getnetent(void);
|
struct netent *getnetent(void);
|
||||||
int getnetgrent(char **, char **, char **);
|
int getnetgrent(char **, char **, char **);
|
||||||
|
@ -259,9 +259,6 @@ getnetanswer(querybuf *answer, int anslen, int net_i, struct netent *ne,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ne->n_aliases++;
|
ne->n_aliases++;
|
||||||
#if __LONG_BIT == 64
|
|
||||||
ne->__n_pad0 = 0; /* ABI compatibility */
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
h_errno = TRY_AGAIN;
|
h_errno = TRY_AGAIN;
|
||||||
@ -334,9 +331,6 @@ _dns_getnetbyaddr(void *rval, void *cb_data, va_list ap)
|
|||||||
while ((net & 0xff) == 0 && net != 0)
|
while ((net & 0xff) == 0 && net != 0)
|
||||||
net >>= 8;
|
net >>= 8;
|
||||||
ne->n_net = net;
|
ne->n_net = net;
|
||||||
#if __LONG_BIT == 64
|
|
||||||
ne->__n_pad0 = 0; /* ABI compatibility */
|
|
||||||
#endif
|
|
||||||
return NS_SUCCESS;
|
return NS_SUCCESS;
|
||||||
}
|
}
|
||||||
return NS_NOTFOUND;
|
return NS_NOTFOUND;
|
||||||
|
@ -122,9 +122,6 @@ getnetent_r(struct netent *ne, struct netent_data *ned)
|
|||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
*p++ = '\0';
|
*p++ = '\0';
|
||||||
ne->n_net = inet_network(cp);
|
ne->n_net = inet_network(cp);
|
||||||
#if __LONG_BIT == 64
|
|
||||||
ne->__n_pad0 = 0; /* ABI compatibility */
|
|
||||||
#endif
|
|
||||||
ne->n_addrtype = AF_INET;
|
ne->n_addrtype = AF_INET;
|
||||||
q = ne->n_aliases = ned->net_aliases;
|
q = ne->n_aliases = ned->net_aliases;
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
|
@ -99,9 +99,6 @@ _getnetbynis(const char *name, char *map, int af, struct netent *ne,
|
|||||||
cp++;
|
cp++;
|
||||||
|
|
||||||
ne->n_net = inet_network(cp);
|
ne->n_net = inet_network(cp);
|
||||||
#if __LONG_BIT == 64
|
|
||||||
ne->__n_pad0 = 0; /* ABI compatibility */
|
|
||||||
#endif
|
|
||||||
ne->n_addrtype = AF_INET;
|
ne->n_addrtype = AF_INET;
|
||||||
|
|
||||||
q = ne->n_aliases = ned->net_aliases;
|
q = ne->n_aliases = ned->net_aliases;
|
||||||
|
@ -165,17 +165,13 @@ getnetbyname(const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct netent *
|
struct netent *
|
||||||
#if __LONG_BIT == 64
|
|
||||||
getnetbyaddr(u_long addr, int af) /* ABI compatibility */
|
|
||||||
#else
|
|
||||||
getnetbyaddr(uint32_t addr, int af)
|
getnetbyaddr(uint32_t addr, int af)
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
struct netdata *nd;
|
struct netdata *nd;
|
||||||
|
|
||||||
if ((nd = __netdata_init()) == NULL)
|
if ((nd = __netdata_init()) == NULL)
|
||||||
return 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 NULL;
|
||||||
return &nd->net;
|
return &nd->net;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user