diff --git a/reactos/dll/win32/ws2_32_new/src/addrinfo.c b/reactos/dll/win32/ws2_32_new/src/addrinfo.c index 69d45261037..8e0b3aa3505 100644 --- a/reactos/dll/win32/ws2_32_new/src/addrinfo.c +++ b/reactos/dll/win32/ws2_32_new/src/addrinfo.c @@ -87,15 +87,18 @@ WINAPI ParseV4Address(IN PCWSTR AddressString, OUT PDWORD pAddress) { - DWORD Address; - LPWSTR Ip = 0; + IN_ADDR Address; + PCWSTR Terminator; + NTSTATUS Status; - /* Do the conversion, don't accept wildcard */ - RtlIpv4StringToAddressW((LPWSTR)AddressString, 0, &Ip, (IN_ADDR *)&Address); + *pAddress = 0; + Status = RtlIpv4StringToAddressW(AddressString, FALSE, &Terminator, &Address); - /* Return the address and success */ - *pAddress = Address; - return FALSE; + if (!NT_SUCCESS(Status)) + return FALSE; + + *pAddress = Address.S_un.S_addr; + return TRUE; } static diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 405e16d86f6..c0a205c473f 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -3991,16 +3991,46 @@ RtlComputeCrc32( // // Network Functions // +NTSYSAPI +NTSTATUS +NTAPI +RtlIpv4StringToAddressA( + _In_ PCSTR String, + _In_ BOOLEAN Strict, + _Out_ PCSTR *Terminator, + _Out_ struct in_addr *Addr +); + NTSYSAPI NTSTATUS NTAPI RtlIpv4StringToAddressW( _In_ PCWSTR String, _In_ BOOLEAN Strict, - _Out_ LPWSTR *Terminator, + _Out_ PCWSTR *Terminator, _Out_ struct in_addr *Addr ); +NTSYSAPI +NTSTATUS +NTAPI +RtlIpv4StringToAddressExA( + _In_ PCSTR AddressString, + _In_ BOOLEAN Strict, + _Out_ struct in_addr *Address, + _Out_ PUSHORT Port +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlIpv4StringToAddressExW( + _In_ PCWSTR AddressString, + _In_ BOOLEAN Strict, + _Out_ struct in_addr *Address, + _Out_ PUSHORT Port +); + NTSYSAPI NTSTATUS NTAPI diff --git a/reactos/include/psdk/mstcpip.h b/reactos/include/psdk/mstcpip.h index 118fccf34d2..0f34c2e04e6 100644 --- a/reactos/include/psdk/mstcpip.h +++ b/reactos/include/psdk/mstcpip.h @@ -1340,7 +1340,7 @@ NTSYSAPI LONG NTAPI RtlIpv4StringToAddressA( - _In_ PCSTR S, + _In_ PCSTR String, _In_ BOOLEAN Strict, _Out_ PCSTR *Terminator, _Out_ struct in_addr *Addr); @@ -1358,9 +1358,9 @@ NTSYSAPI LONG NTAPI RtlIpv4StringToAddressW( - _In_ PCWSTR S, + _In_ PCWSTR String, _In_ BOOLEAN Strict, - _Out_ LPCWSTR *Terminator, + _Out_ PCWSTR *Terminator, _Out_ struct in_addr *Addr); NTSYSAPI diff --git a/reactos/lib/rtl/network.c b/reactos/lib/rtl/network.c index f870c65e024..d8d4436e8a6 100644 --- a/reactos/lib/rtl/network.c +++ b/reactos/lib/rtl/network.c @@ -32,7 +32,7 @@ RtlIpv4AddressToStringA(IN struct in_addr *Addr, OUT PCHAR S) { INT Length; - + if (!S) return (LPSTR)~0; Length = sprintf(S, "%u.%u.%u.%u", Addr->S_un.S_un_b.s_b1, @@ -88,7 +88,7 @@ RtlIpv4AddressToStringW(IN struct in_addr *Addr, INT Length; if (!S) return (LPWSTR)~0; - + Length = swprintf(S, L"%u.%u.%u.%u", Addr->S_un.S_un_b.s_b1, Addr->S_un.S_un_b.s_b2, Addr->S_un.S_un_b.s_b3, @@ -135,9 +135,9 @@ RtlIpv4AddressToStringExW(IN struct in_addr *Address, */ NTSTATUS NTAPI -RtlIpv4StringToAddressA(IN PCHAR String, +RtlIpv4StringToAddressA(IN PCSTR String, IN BOOLEAN Strict, - OUT PCHAR *Terminator, + OUT PCSTR *Terminator, OUT struct in_addr *Addr) { UNIMPLEMENTED; @@ -149,10 +149,10 @@ RtlIpv4StringToAddressA(IN PCHAR String, */ NTSTATUS NTAPI -RtlIpv4StringToAddressExA(IN PCHAR AddressString, +RtlIpv4StringToAddressExA(IN PCSTR AddressString, IN BOOLEAN Strict, OUT struct in_addr *Address, - IN PUSHORT Port) + OUT PUSHORT Port) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; @@ -165,7 +165,7 @@ NTSTATUS NTAPI RtlIpv4StringToAddressW(IN PCWSTR String, IN BOOLEAN Strict, - OUT LPWSTR *Terminator, + OUT PCWSTR *Terminator, OUT struct in_addr *Addr) { UNIMPLEMENTED; @@ -177,7 +177,7 @@ RtlIpv4StringToAddressW(IN PCWSTR String, */ NTSTATUS NTAPI -RtlIpv4StringToAddressExW(IN PWCHAR AddressString, +RtlIpv4StringToAddressExW(IN PCWSTR AddressString, IN BOOLEAN Strict, OUT struct in_addr *Address, OUT PUSHORT Port)