More ticket #415: Added pj_sockaddr_get_len() and pj_inet_ntop2(), and fixed Symbian combilation warnings with gcce

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1608 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjlib/src/pj/addr_resolv_sock.c b/pjlib/src/pj/addr_resolv_sock.c
index aeb6195..997b7bd 100644
--- a/pjlib/src/pj/addr_resolv_sock.c
+++ b/pjlib/src/pj/addr_resolv_sock.c
@@ -61,7 +61,7 @@
 {
 #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 @@
     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 @@
 
     *count = i;
 
+    freeaddrinfo(orig_res);
+
     /* Done */
     return PJ_SUCCESS;