libwinpr-winsock: add inet_ntop for Windows XP portability

This commit is contained in:
Marc-André Moreau
2012-09-20 10:42:01 -04:00
parent c06c2ebbe3
commit 699eabcfb8
3 changed files with 50 additions and 6 deletions

View File

@@ -22,14 +22,23 @@
#include <winpr/winpr.h>
#include <winpr/wtypes.h>
#include <winpr/windows.h>
#ifndef _WIN32
#ifdef _WIN32
#if (_WIN32_WINNT < 0x0600)
PCSTR inet_ntop(INT Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize);
#endif /* (_WIN32_WINNT < 0x0600) */
#else /* _WIN32 */
#include <sys/socket.h>
typedef struct sockaddr_storage SOCKADDR_STORAGE;
#endif
#endif /* _WIN32 */
#endif /* WINPR_WINSOCK_H */

View File

@@ -83,11 +83,12 @@ typedef unsigned __int3264 ULONG_PTR;
typedef signed int LONG32;
typedef signed __int64 LONG64;
typedef const char* LPCSTR;
typedef CHAR* PSTR, *LPSTR;
typedef const CHAR *LPCSTR,*PCSTR;
typedef WCHAR* LPWSTR, *PWSTR;
typedef const WCHAR *LPCWSTR,*PCWSTR;
typedef char* PSTR, *LPSTR;
typedef unsigned __int64 QWORD;
typedef UCHAR* STRING;

View File

@@ -208,8 +208,42 @@
* WSCWriteProviderOrderEx
*/
#ifndef _WIN32
#ifdef _WIN32
#if (_WIN32_WINNT < 0x0600)
PCSTR inet_ntop(INT Family, PVOID pAddr, PSTR pStringBuf, size_t StringBufSize)
{
if (Family == AF_INET)
{
struct sockaddr_in in;
memset(&in, 0, sizeof(in));
in.sin_family = AF_INET;
memcpy(&in.sin_addr, pAddr, sizeof(struct in_addr));
getnameinfo((struct sockaddr*) &in, sizeof(struct sockaddr_in), pStringBuf, StringBufSize, NULL, 0, NI_NUMERICHOST);
return pStringBuf;
}
else if (Family == AF_INET6)
{
struct sockaddr_in6 in;
memset(&in, 0, sizeof(in));
in.sin6_family = AF_INET6;
memcpy(&in.sin6_addr, pAddr, sizeof(struct in_addr6));
getnameinfo((struct sockaddr*) &in, sizeof(struct sockaddr_in6), pStringBuf, StringBufSize, NULL, 0, NI_NUMERICHOST);
return pStringBuf;
}
return NULL;
}
#endif /* (_WIN32_WINNT < 0x0600) */
#else /* _WIN32 */
#endif
#endif /* _WIN32 */