From a3e8496b8d4d76e5575742d1ca5de4c256aa249a Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sat, 14 Feb 2015 19:14:32 +0000 Subject: [PATCH] [RTL] - Implement RtlIpv4StringToAddressExW. Patch by Mark Jansen. CORE-6490 svn path=/trunk/; revision=66270 --- reactos/lib/rtl/network.c | 49 +++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/reactos/lib/rtl/network.c b/reactos/lib/rtl/network.c index 5b531960c26..4ec2e6e9868 100644 --- a/reactos/lib/rtl/network.c +++ b/reactos/lib/rtl/network.c @@ -337,17 +337,52 @@ Done: } /* -* @unimplemented +* @implemented */ NTSTATUS NTAPI -RtlIpv4StringToAddressExW(IN PCWSTR AddressString, - IN BOOLEAN Strict, - OUT struct in_addr *Address, - OUT PUSHORT Port) +RtlIpv4StringToAddressExW( + _In_ PCWSTR AddressString, + _In_ BOOLEAN Strict, + _Out_ struct in_addr *Address, + _Out_ PUSHORT Port) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + PCWSTR CurrentChar; + ULONG ConvertedPort; + NTSTATUS Status; + + if (!AddressString || !Address || !Port) + return STATUS_INVALID_PARAMETER; + + Status = RtlIpv4StringToAddressW(AddressString, + Strict, + &CurrentChar, + Address); + if (!NT_SUCCESS(Status)) + return Status; + + if (!*CurrentChar) + { + *Port = 0; + return STATUS_SUCCESS; + } + + if (*CurrentChar != L':') + return STATUS_INVALID_PARAMETER; + ++CurrentChar; + + Status = RtlpStringToUlong(CurrentChar, + FALSE, + &CurrentChar, + &ConvertedPort); + if (!NT_SUCCESS(Status)) + return Status; + + if (*CurrentChar || !ConvertedPort || ConvertedPort > 0xffff) + return STATUS_INVALID_PARAMETER; + + *Port = WN2H(ConvertedPort); + return STATUS_SUCCESS; } /*