summaryrefslogtreecommitdiff
path: root/pjlib/src/pj/addr_resolv_sock.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-12-02 15:36:46 +0000
committerBenny Prijono <bennylp@teluu.com>2007-12-02 15:36:46 +0000
commitb49338ee972a66fb6e5ece4b97440d0c3cfa642b (patch)
tree0a3df788f90101bd04b667021eac514355f22b1f /pjlib/src/pj/addr_resolv_sock.c
parentea951533e9d970b9fd9d98b34081f568679d9bfc (diff)
More ticket #415: Added pj_sockaddr_get_len() and pj_inet_ntop2(), and fixed Symbian combilation warnings with gcce
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1608 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src/pj/addr_resolv_sock.c')
-rw-r--r--pjlib/src/pj/addr_resolv_sock.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/pjlib/src/pj/addr_resolv_sock.c b/pjlib/src/pj/addr_resolv_sock.c
index aeb61951..997b7bd4 100644
--- a/pjlib/src/pj/addr_resolv_sock.c
+++ b/pjlib/src/pj/addr_resolv_sock.c
@@ -61,7 +61,7 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
{
#if defined(PJ_SOCK_HAS_GETADDRINFO) && PJ_SOCK_HAS_GETADDRINFO!=0
char nodecopy[PJ_MAX_HOSTNAME];
- struct addrinfo hint, *res;
+ struct addrinfo hint, *res, *orig_res;
unsigned i;
int rc;
@@ -84,18 +84,22 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
if (rc != 0)
return PJ_ERESOLVE;
+ orig_res = res;
+
/* Enumerate each item in the result */
for (i=0; i<*count && res; res=res->ai_next) {
- int len;
-
/* Ignore unwanted address families */
if (af!=PJ_AF_UNSPEC && res->ai_family != af)
continue;
/* Store canonical name (possibly truncating the name) */
- 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';
+ 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';
+ } else {
+ pj_ansi_strcpy(ai[i].ai_canonname, nodecopy);
+ }
/* Store address */
PJ_ASSERT_ON_FAIL(res->ai_addrlen <= sizeof(pj_sockaddr), continue);
@@ -107,6 +111,8 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
*count = i;
+ freeaddrinfo(orig_res);
+
/* Done */
return PJ_SUCCESS;