diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-12-02 15:36:46 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-12-02 15:36:46 +0000 |
commit | b49338ee972a66fb6e5ece4b97440d0c3cfa642b (patch) | |
tree | 0a3df788f90101bd04b667021eac514355f22b1f /pjlib/src/pj/addr_resolv_sock.c | |
parent | ea951533e9d970b9fd9d98b34081f568679d9bfc (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.c | 18 |
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; |