diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2016-07-05 12:53:20 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2016-07-05 12:53:20 +0000 |
commit | 03f43da1e9af282cb616993d2ebec889ae386784 (patch) | |
tree | 25db378e3d0a67267939635ca679787b412c0ac0 /pjlib | |
parent | 2c7d7baea1e3029c46d21d5ede820ccd17789a45 (diff) |
Misc (re #1928): pj_getaddrinfo() is better to return error when no address is found, some codes in the library seem to expect pj_getaddrinfo() to behave this way.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5376 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib')
-rw-r--r-- | pjlib/src/pj/addr_resolv_sock.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/pjlib/src/pj/addr_resolv_sock.c b/pjlib/src/pj/addr_resolv_sock.c index 03735e9b..0af107e7 100644 --- a/pjlib/src/pj/addr_resolv_sock.c +++ b/pjlib/src/pj/addr_resolv_sock.c @@ -154,7 +154,7 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename, if (addr->sa_family == PJ_AF_INET6) { addr_size = addr->sa_len; } - PJ_ASSERT_ON_FAIL(addr_size <= sizeof(pj_sockaddr), continue); + PJ_ASSERT_ON_FAIL(addr_size <= sizeof(pj_sockaddr), continue); pj_memcpy(&ai[i].ai_addr, addr, addr_size); PJ_SOCKADDR_RESET_LEN(&ai[i].ai_addr); @@ -163,6 +163,9 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename, } *count = i; + if (*count == 0) + status = PJ_ERESOLVE; + } else { status = PJ_ERESOLVE; } @@ -183,6 +186,7 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename, orig_res = res; /* Enumerate each item in the result */ + rc = 0; for (i=0; i<*count && res; res=res->ai_next) { /* Ignore unwanted address families */ if (af!=PJ_AF_UNSPEC && res->ai_family != af) @@ -190,28 +194,28 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename, /* Store canonical name (possibly truncating the name) */ if (res->ai_canonname) { - pj_ansi_strncpy(ai[i].ai_canonname, res->ai_canonname, - sizeof(ai[i].ai_canonname)); - ai[i].ai_canonname[sizeof(ai[i].ai_canonname)-1] = '\0'; + pj_ansi_strncpy(ai[rc].ai_canonname, res->ai_canonname, + sizeof(ai[rc].ai_canonname)); + ai[rc].ai_canonname[sizeof(ai[rc].ai_canonname)-1] = '\0'; } else { - pj_ansi_strcpy(ai[i].ai_canonname, nodecopy); + pj_ansi_strcpy(ai[rc].ai_canonname, nodecopy); } /* Store address */ PJ_ASSERT_ON_FAIL(res->ai_addrlen <= sizeof(pj_sockaddr), continue); - pj_memcpy(&ai[i].ai_addr, res->ai_addr, res->ai_addrlen); - PJ_SOCKADDR_RESET_LEN(&ai[i].ai_addr); + pj_memcpy(&ai[rc].ai_addr, res->ai_addr, res->ai_addrlen); + PJ_SOCKADDR_RESET_LEN(&ai[rc].ai_addr); /* Next slot */ - ++i; + ++rc; } - *count = i; + *count = rc; freeaddrinfo(orig_res); /* Done */ - return PJ_SUCCESS; + return (*count > 0? PJ_SUCCESS : PJ_ERESOLVE); #endif #else /* PJ_SOCK_HAS_GETADDRINFO */ @@ -285,7 +289,7 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename, (*count)++; } - return PJ_SUCCESS; + return (*count > 0? PJ_SUCCESS : PJ_ERESOLVE); } else { /* IPv6 is not supported */ |