VirtualBox

Ignore:
Timestamp:
Nov 28, 2013 4:47:11 AM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
90964
Message:

Provide implementation of inet_ntop(), which is available only since
Vista, in terms of WSAAddressToStringA(), available ~everywhere. It
should probably be exiled into a proper .c file, but inline will do
for now.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/NetworkServices/NAT/winutils.h

    r49691 r49694  
    3636#  define __func__ __FUNCTION__
    3737#  define __attribute__(x) /* IGNORE */
    38 #  define inet_ntop(dom, pvaddr, pstrbuf, cbstrbuf) InetNtop((dom),(pvaddr),(pstrbuf),(cbstrbuf))
     38
     39/*
     40 * XXX: inet_ntop() is only available starting from Vista.
     41 */
     42DECLINLINE(PCSTR)
     43inet_ntop(INT Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize)
     44{
     45    DWORD size = (DWORD)StringBufSize;
     46    int status;
     47
     48    if (Family == AF_INET)
     49    {
     50        struct sockaddr_in sin;
     51        memset(&sin, 0, sizeof(sin));
     52        sin.sin_family = AF_INET;
     53        memcpy(&sin.sin_addr, pAddr, sizeof(sin.sin_addr));
     54        sin.sin_port = 0;
     55        status = WSAAddressToStringA((LPSOCKADDR)&sin, sizeof(sin), NULL,
     56                                     pStringBuf, &size);
     57    }
     58    else if (Family == AF_INET6)
     59    {
     60        struct sockaddr_in6 sin6;
     61        memset(&sin6, 0, sizeof(sin6));
     62        sin6.sin6_family = AF_INET6;
     63        memcpy(&sin6.sin6_addr, pAddr, sizeof(sin6.sin6_addr));
     64        sin6.sin6_port = 0;
     65        status = WSAAddressToStringA((LPSOCKADDR)&sin6, sizeof(sin6), NULL,
     66                                     pStringBuf, &size);
     67    }
     68    else
     69    {
     70        WSASetLastError(WSAEAFNOSUPPORT);
     71        return NULL;
     72    }
     73
     74    if (status == SOCKET_ERROR)
     75    {
     76        return NULL;
     77    }
     78
     79    return pStringBuf;
     80}
    3981
    4082
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette