@@ -939,7 +939,7 @@ int addr_parse_ip(const char *address, IP *to)
939939 * returns in *to a valid IPAny (v4/v6),
940940 * prefers v6 if ip.family was AF_UNSPEC and both available
941941 * returns in *extra an IPv4 address, if family was AF_UNSPEC and *to is AF_INET6
942- * returns 0 on failure
942+ * returns 0 on failure, TOX_ADDR_RESOLVE_* on success.
943943 */
944944int addr_resolve (const char * address , IP * to , IP * extra )
945945{
@@ -951,7 +951,9 @@ int addr_resolve(const char *address, IP *to, IP *extra)
951951 struct addrinfo * server = NULL ;
952952 struct addrinfo * walker = NULL ;
953953 struct addrinfo hints ;
954- int rc ;
954+ int rc ;
955+ int result = 0 ;
956+ int done = 0 ;
955957
956958 memset (& hints , 0 , sizeof (hints ));
957959 hints .ai_family = family ;
@@ -968,21 +970,22 @@ int addr_resolve(const char *address, IP *to, IP *extra)
968970 }
969971
970972 IP ip4 ;
971- ip_init (& ip4 , /* ipv6? */ false);
973+ ip_init (& ip4 , 0 ); // ipv6enabled = 0
972974 IP ip6 ;
973- ip_init (& ip6 , /* ipv6? */ true);
975+ ip_init (& ip6 , 1 ); // ipv6enabled = 1
974976
975- for (walker = server ; (walker != NULL ) && ( rc != 3 ) ; walker = walker -> ai_next ) {
977+ for (walker = server ; (walker != NULL ) && ! done ; walker = walker -> ai_next ) {
976978 switch (walker -> ai_family ) {
977979 case AF_INET :
978980 if (walker -> ai_family == family ) { /* AF_INET requested, done */
979981 struct sockaddr_in * addr = (struct sockaddr_in * )walker -> ai_addr ;
980982 to -> ip4 .in_addr = addr -> sin_addr ;
981- rc = 3 ; // TODO do we really have to reuse variable instead of creating a new one?
982- } else if (!(rc & 1 )) { /* AF_UNSPEC requested, store away */
983+ result = TOX_ADDR_RESOLVE_INET ;
984+ done = 1 ;
985+ } else if (!(result & TOX_ADDR_RESOLVE_INET )) { /* AF_UNSPEC requested, store away */
983986 struct sockaddr_in * addr = (struct sockaddr_in * )walker -> ai_addr ;
984987 ip4 .ip4 .in_addr = addr -> sin_addr ;
985- rc |= 1 ; // FIXME magic number
988+ result |= TOX_ADDR_RESOLVE_INET ;
986989 }
987990
988991 break ; /* switch */
@@ -992,35 +995,37 @@ int addr_resolve(const char *address, IP *to, IP *extra)
992995 if (walker -> ai_addrlen == sizeof (struct sockaddr_in6 )) {
993996 struct sockaddr_in6 * addr = (struct sockaddr_in6 * )walker -> ai_addr ;
994997 to -> ip6 .in6_addr = addr -> sin6_addr ;
995- rc = 3 ;
998+ result = TOX_ADDR_RESOLVE_INET6 ;
999+ done = 1 ;
9961000 }
997- } else if (!(rc & 2 )) { /* AF_UNSPEC requested, store away */
1001+ } else if (!(result & TOX_ADDR_RESOLVE_INET6 )) { /* AF_UNSPEC requested, store away */
9981002 if (walker -> ai_addrlen == sizeof (struct sockaddr_in6 )) {
9991003 struct sockaddr_in6 * addr = (struct sockaddr_in6 * )walker -> ai_addr ;
10001004 ip6 .ip6 .in6_addr = addr -> sin6_addr ;
1001- rc |= 2 ;
1005+ result |= TOX_ADDR_RESOLVE_INET6 ;
10021006 }
10031007 }
10041008
10051009 break ; /* switch */
10061010 }
10071011 }
10081012
1009- if (to -> family == AF_UNSPEC ) {
1010- if (rc & 2 ) { // FIXME magic number
1013+ if (family == AF_UNSPEC ) {
1014+ if (result & TOX_ADDR_RESOLVE_INET6 ) {
10111015 ip_copy (to , & ip6 );
10121016
1013- if ((rc & 1 ) && (extra != NULL )) {
1017+ if ((result & TOX_ADDR_RESOLVE_INET ) && (extra != NULL )) {
10141018 ip_copy (extra , & ip4 );
10151019 }
1016- } else if (rc & 1 ) {
1020+ } else if (result & TOX_ADDR_RESOLVE_INET ) {
10171021 ip_copy (to , & ip4 );
1018- } else
1019- rc = 0 ;
1022+ } else {
1023+ result = 0 ;
1024+ }
10201025 }
10211026
10221027 freeaddrinfo (server );
1023- return rc ;
1028+ return result ;
10241029}
10251030
10261031/*
0 commit comments