Changeset 5376


Ignore:
Timestamp:
Jul 5, 2016 12:53:20 PM (3 years ago)
Author:
nanang
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/addr_resolv_sock.c

    r5319 r5376  
    155155                    addr_size = addr->sa_len; 
    156156                } 
    157                 PJ_ASSERT_ON_FAIL(addr_size <= sizeof(pj_sockaddr),                               continue); 
     157                PJ_ASSERT_ON_FAIL(addr_size <= sizeof(pj_sockaddr), continue); 
    158158                pj_memcpy(&ai[i].ai_addr, addr, addr_size); 
    159159                PJ_SOCKADDR_RESET_LEN(&ai[i].ai_addr); 
     
    164164         
    165165        *count = i; 
     166        if (*count == 0) 
     167            status = PJ_ERESOLVE; 
     168 
    166169    } else { 
    167170        status = PJ_ERESOLVE; 
     
    184187 
    185188    /* Enumerate each item in the result */ 
     189    rc = 0; 
    186190    for (i=0; i<*count && res; res=res->ai_next) { 
    187191        /* Ignore unwanted address families */ 
     
    191195        /* Store canonical name (possibly truncating the name) */ 
    192196        if (res->ai_canonname) { 
    193             pj_ansi_strncpy(ai[i].ai_canonname, res->ai_canonname, 
    194                             sizeof(ai[i].ai_canonname)); 
    195             ai[i].ai_canonname[sizeof(ai[i].ai_canonname)-1] = '\0'; 
     197            pj_ansi_strncpy(ai[rc].ai_canonname, res->ai_canonname, 
     198                            sizeof(ai[rc].ai_canonname)); 
     199            ai[rc].ai_canonname[sizeof(ai[rc].ai_canonname)-1] = '\0'; 
    196200        } else { 
    197             pj_ansi_strcpy(ai[i].ai_canonname, nodecopy); 
     201            pj_ansi_strcpy(ai[rc].ai_canonname, nodecopy); 
    198202        } 
    199203 
    200204        /* Store address */ 
    201205        PJ_ASSERT_ON_FAIL(res->ai_addrlen <= sizeof(pj_sockaddr), continue); 
    202         pj_memcpy(&ai[i].ai_addr, res->ai_addr, res->ai_addrlen); 
    203         PJ_SOCKADDR_RESET_LEN(&ai[i].ai_addr); 
     206        pj_memcpy(&ai[rc].ai_addr, res->ai_addr, res->ai_addrlen); 
     207        PJ_SOCKADDR_RESET_LEN(&ai[rc].ai_addr); 
    204208 
    205209        /* Next slot */ 
    206         ++i; 
    207     } 
    208  
    209     *count = i; 
     210        ++rc; 
     211    } 
     212 
     213    *count = rc; 
    210214 
    211215    freeaddrinfo(orig_res); 
    212216 
    213217    /* Done */ 
    214     return PJ_SUCCESS; 
     218    return (*count > 0? PJ_SUCCESS : PJ_ERESOLVE); 
    215219#endif 
    216220 
     
    286290        } 
    287291 
    288         return PJ_SUCCESS; 
     292        return (*count > 0? PJ_SUCCESS : PJ_ERESOLVE); 
    289293 
    290294    } else { 
Note: See TracChangeset for help on using the changeset viewer.