- Implement RtlIpv4StringToAddressA and RtlIpv4StringToAddressExA using their -W counterparts
CORE-6490

svn path=/trunk/; revision=66187
This commit is contained in:
Thomas Faber 2015-02-07 10:07:24 +00:00
parent 3e714d22fb
commit 16c8f0601d

View file

@ -131,31 +131,70 @@ RtlIpv4AddressToStringExW(IN struct in_addr *Address,
} }
/* /*
* @unimplemented * @implemented
*/ */
NTSTATUS NTSTATUS
NTAPI NTAPI
RtlIpv4StringToAddressA(IN PCSTR String, RtlIpv4StringToAddressA(
IN BOOLEAN Strict, _In_ PCSTR String,
OUT PCSTR *Terminator, _In_ BOOLEAN Strict,
OUT struct in_addr *Addr) _Out_ PCSTR *Terminator,
_Out_ struct in_addr *Addr)
{ {
UNIMPLEMENTED; NTSTATUS Status;
return STATUS_NOT_IMPLEMENTED; ANSI_STRING AddressA;
UNICODE_STRING AddressW;
PCWSTR TerminatorW = NULL;
Status = RtlInitAnsiStringEx(&AddressA, String);
if (!NT_SUCCESS(Status))
return Status;
Status = RtlAnsiStringToUnicodeString(&AddressW, &AddressA, TRUE);
if (!NT_SUCCESS(Status))
return Status;
Status = RtlIpv4StringToAddressW(AddressW.Buffer,
Strict,
&TerminatorW,
Addr);
ASSERT(TerminatorW >= AddressW.Buffer);
*Terminator = String + (TerminatorW - AddressW.Buffer);
RtlFreeUnicodeString(&AddressW);
return Status;
} }
/* /*
* @unimplemented * @implemented
*/ */
NTSTATUS NTSTATUS
NTAPI NTAPI
RtlIpv4StringToAddressExA(IN PCSTR AddressString, RtlIpv4StringToAddressExA(
IN BOOLEAN Strict, _In_ PCSTR AddressString,
OUT struct in_addr *Address, _In_ BOOLEAN Strict,
OUT PUSHORT Port) _Out_ struct in_addr *Address,
_Out_ PUSHORT Port)
{ {
UNIMPLEMENTED; NTSTATUS Status;
return STATUS_NOT_IMPLEMENTED; ANSI_STRING AddressA;
UNICODE_STRING AddressW;
Status = RtlInitAnsiStringEx(&AddressA, AddressString);
if (!NT_SUCCESS(Status))
return Status;
Status = RtlAnsiStringToUnicodeString(&AddressW, &AddressA, TRUE);
if (!NT_SUCCESS(Status))
return Status;
Status = RtlIpv4StringToAddressExW(AddressW.Buffer, Strict, Address, Port);
RtlFreeUnicodeString(&AddressW);
return Status;
} }
/* /*