Ignore:
Timestamp:
Jun 25, 2010, 8:36:10 PM (12 years ago)
Author:
charles
Message:

(trunk libT) #3311 "MingW build of Transmission" -- apply further win32 diffs from rb07

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/net.c

    r10816 r10858  
    6565
    6666#ifdef WIN32
    67 static const char *
    68 inet_ntop( int af, const void *src, char *dst, socklen_t cnt )
     67const char *
     68inet_ntop( int af, const void * src, char * dst, socklen_t cnt )
    6969{
    7070    if (af == AF_INET)
     
    9191}
    9292
    93 static int
    94 inet_pton(int af, const char *src, void *dst)
    95 {
    96     struct addrinfo hints;
    97     struct addrinfo *res;
    98     struct addrinfo *ressave;
    99 
    100     memset(&hints, 0, sizeof(struct addrinfo));
     93int
     94inet_pton( int af, const char * src, void * dst )
     95{
     96    struct addrinfo hints, *res, *ressave;
     97    struct sockaddr_in * s4;
     98    struct sockaddr_in6 * s6;
     99
     100    memset( &hints, 0, sizeof( struct addrinfo ));
    101101    hints.ai_family = af;
    102 
    103     if (getaddrinfo(src, NULL, &hints, &res) != 0)
    104         return -1;
     102    hints.ai_flags = AI_NUMERICHOST;
     103
     104    if( getaddrinfo( src, NULL, &hints, &res ) ) {
     105        if( WSAGetLastError() == WSAHOST_NOT_FOUND )
     106            return 0;
     107        else {
     108            errno = EAFNOSUPPORT;
     109            return -1;
     110        }
     111    }
    105112
    106113    ressave = res;
    107 
    108     while (res)
    109     {
    110         memcpy(dst, res->ai_addr, res->ai_addrlen);
     114    while( res ) {
     115        switch (res->ai_family) {
     116            case AF_INET:
     117                s4 = (struct sockaddr_in *) res->ai_addr;
     118                memcpy( dst, &s4->sin_addr, sizeof( struct in_addr ) );
     119                break;
     120            case AF_INET6:
     121                s6 = (struct sockaddr_in6 *) res->ai_addr;
     122                memcpy( dst, &s6->sin6_addr, sizeof( struct in6_addr ) );
     123                break;
     124            default: /* AF_UNSPEC, AF_NETBIOS */
     125                break;
     126        }
    111127        res = res->ai_next;
    112128    }
    113129
    114130    freeaddrinfo(ressave);
    115     return 0;
    116 }
    117 
    118 #endif
    119 
     131    return 1;
     132}
     133#endif
    120134
    121135void
Note: See TracChangeset for help on using the changeset viewer.