From b49338ee972a66fb6e5ece4b97440d0c3cfa642b Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Sun, 2 Dec 2007 15:36:46 +0000 Subject: 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 --- pjlib/src/pj/addr_resolv_sock.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'pjlib/src/pj/addr_resolv_sock.c') 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; -- cgit v1.2.3