mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2026-08-09 17:13:49 +08:00
Fixed using wrong sockaddr type in lwip_getaddrinfo when IPv6 is enabled
This commit is contained in:
@@ -346,7 +346,7 @@ lwip_getaddrinfo(const char *nodename, const char *servname,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
total_size = sizeof(struct addrinfo) + sizeof(struct sockaddr_in);
|
total_size = sizeof(struct addrinfo) + sizeof(struct sockaddr_storage);
|
||||||
if (nodename != NULL) {
|
if (nodename != NULL) {
|
||||||
namelen = strlen(nodename);
|
namelen = strlen(nodename);
|
||||||
if (namelen > DNS_MAX_NAME_LENGTH) {
|
if (namelen > DNS_MAX_NAME_LENGTH) {
|
||||||
@@ -395,11 +395,11 @@ lwip_getaddrinfo(const char *nodename, const char *servname,
|
|||||||
}
|
}
|
||||||
if (nodename != NULL) {
|
if (nodename != NULL) {
|
||||||
/* copy nodename to canonname if specified */
|
/* copy nodename to canonname if specified */
|
||||||
ai->ai_canonname = ((char*)ai + sizeof(struct addrinfo) + sizeof(struct sockaddr_in));
|
ai->ai_canonname = ((char*)ai + sizeof(struct addrinfo) + sizeof(struct sockaddr_storage));
|
||||||
MEMCPY(ai->ai_canonname, nodename, namelen);
|
MEMCPY(ai->ai_canonname, nodename, namelen);
|
||||||
ai->ai_canonname[namelen] = 0;
|
ai->ai_canonname[namelen] = 0;
|
||||||
}
|
}
|
||||||
ai->ai_addrlen = sizeof(struct sockaddr_in);
|
ai->ai_addrlen = sizeof(struct sockaddr_storage);
|
||||||
ai->ai_addr = (struct sockaddr*)sa;
|
ai->ai_addr = (struct sockaddr*)sa;
|
||||||
|
|
||||||
*res = ai;
|
*res = ai;
|
||||||
|
|||||||
@@ -246,7 +246,9 @@ union sockaddr_aligned {
|
|||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
struct sockaddr_in6 sin6;
|
struct sockaddr_in6 sin6;
|
||||||
#endif /* LWIP_IPV6 */
|
#endif /* LWIP_IPV6 */
|
||||||
|
#if LWIP_IPV4
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sin;
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
};
|
};
|
||||||
|
|
||||||
#if LWIP_IGMP
|
#if LWIP_IGMP
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ typedef u8_t sa_family_t;
|
|||||||
typedef u16_t in_port_t;
|
typedef u16_t in_port_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if LWIP_IPV4
|
||||||
/* members are in network byte order */
|
/* members are in network byte order */
|
||||||
struct sockaddr_in {
|
struct sockaddr_in {
|
||||||
u8_t sin_len;
|
u8_t sin_len;
|
||||||
@@ -68,6 +69,7 @@ struct sockaddr_in {
|
|||||||
#define SIN_ZERO_LEN 8
|
#define SIN_ZERO_LEN 8
|
||||||
char sin_zero[SIN_ZERO_LEN];
|
char sin_zero[SIN_ZERO_LEN];
|
||||||
};
|
};
|
||||||
|
#endif /* LWIP_IPV4 */
|
||||||
|
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
struct sockaddr_in6 {
|
struct sockaddr_in6 {
|
||||||
|
|||||||
Reference in New Issue
Block a user