libpurple/protocols/gg/resolver-purple.c

changeset 35676
d9fdd45925ec
parent 35361
efdbd45604f1
child 37454
eac2789dd461
equal deleted inserted replaced
35675:9c68f32b99d0 35676:d9fdd45925ec
87 all_count /= 2; 87 all_count /= 2;
88 addresses = malloc((all_count + 1) * sizeof(struct in_addr)); 88 addresses = malloc((all_count + 1) * sizeof(struct in_addr));
89 89
90 ipv4_count = 0; 90 ipv4_count = 0;
91 while (hosts && (hosts = g_slist_delete_link(hosts, hosts))) { 91 while (hosts && (hosts = g_slist_delete_link(hosts, hosts))) {
92 const struct sockaddr *addr = hosts->data; 92 common_sockaddr_t addr;
93 char dst[INET6_ADDRSTRLEN]; 93 char dst[INET6_ADDRSTRLEN];
94 94
95 if (addr->sa_family == AF_INET6) { 95 memcpy(&addr, hosts->data, sizeof(addr));
96 inet_ntop(addr->sa_family, 96
97 &((struct sockaddr_in6 *) addr)->sin6_addr, 97 if (addr.sa.sa_family == AF_INET6) {
98 inet_ntop(addr.sa.sa_family, &addr.in6.sin6_addr,
98 dst, sizeof(dst)); 99 dst, sizeof(dst));
99 purple_debug_misc("gg", "ggp_resolver_purple_cb " 100 purple_debug_misc("gg", "ggp_resolver_purple_cb "
100 "ipv6 (ignore): %s\n", dst); 101 "ipv6 (ignore): %s\n", dst);
101 } else if (addr->sa_family == AF_INET) { 102 } else if (addr.sa.sa_family == AF_INET) {
102 const struct in_addr addr_ipv4 = 103 inet_ntop(addr.sa.sa_family, &addr.in.sin_addr,
103 ((struct sockaddr_in *) addr)->sin_addr;
104 inet_ntop(addr->sa_family, &addr_ipv4,
105 dst, sizeof(dst)); 104 dst, sizeof(dst));
106 purple_debug_misc("gg", "ggp_resolver_purple_cb " 105 purple_debug_misc("gg", "ggp_resolver_purple_cb "
107 "ipv4: %s\n", dst); 106 "ipv4: %s\n", dst);
108 107
109 g_assert(ipv4_count < all_count); 108 g_assert(ipv4_count < all_count);
110 addresses[ipv4_count++] = addr_ipv4; 109 addresses[ipv4_count++] = addr.in.sin_addr;
111 } else { 110 } else {
112 purple_debug_warning("gg", "ggp_resolver_purple_cb " 111 purple_debug_warning("gg", "ggp_resolver_purple_cb "
113 "unexpected sa_family: %d\n", addr->sa_family); 112 "unexpected sa_family: %d\n",
113 addr.sa.sa_family);
114 } 114 }
115 115
116 g_free(hosts->data); 116 g_free(hosts->data);
117 hosts = g_slist_delete_link(hosts, hosts); 117 hosts = g_slist_delete_link(hosts, hosts);
118 } 118 }

mercurial