summaryrefslogtreecommitdiffstats
path: root/ArmPlatformPkg/Bds/BdsHelper.c
diff options
context:
space:
mode:
authorRonald Cron <ronald.cron@arm.com>2014-07-15 09:25:57 +0000
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2014-07-15 09:25:57 +0000
commit8bf4ad4475c061a9ff4fc248ba7f11784d706342 (patch)
tree477bfcadfc9b06a64275fe0c40ae646cdbec99e4 /ArmPlatformPkg/Bds/BdsHelper.c
parent6d0ca2577c3788ee1087177df439246fe8f2b4fd (diff)
downloadedk2-8bf4ad4475c061a9ff4fc248ba7f11784d706342.tar.gz
edk2-8bf4ad4475c061a9ff4fc248ba7f11784d706342.tar.bz2
edk2-8bf4ad4475c061a9ff4fc248ba7f11784d706342.zip
ArmPlatformPkg/Bds: Getting and editing IP addresses
Reworked GetHIInputIP() function to use "NetLibStrToIp4()" library function to parse the IPv4 address instead of doing it by itself. Added function EditHIInputIP() in BdsHelper.c to edit an IPv4 address. To be used when updating a tftp boot option. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ronald Cron <ronald.cron@arm.com> Reviewed-By: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15660 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPlatformPkg/Bds/BdsHelper.c')
-rw-r--r--ArmPlatformPkg/Bds/BdsHelper.c91
1 files changed, 68 insertions, 23 deletions
diff --git a/ArmPlatformPkg/Bds/BdsHelper.c b/ArmPlatformPkg/Bds/BdsHelper.c
index 152061d0f7..8553577cf1 100644
--- a/ArmPlatformPkg/Bds/BdsHelper.c
+++ b/ArmPlatformPkg/Bds/BdsHelper.c
@@ -12,6 +12,7 @@
*
**/
+#include <Library/NetLib.h>
#include "BdsInternal.h"
EFI_STATUS
@@ -137,43 +138,87 @@ GetHIInputInteger (
return Status;
}
+/**
+ Get an IPv4 address
+
+ The function asks the user for an IPv4 address. If the input
+ string defines a valid IPv4 address, the four bytes of the
+ corresponding IPv4 address are extracted from the string and returned by
+ the function.
+
+ @param[out] EFI_IP_ADDRESS OutIpAddr Returned IPv4 address. Valid if
+ and only if the returned value
+ is equal to EFI_SUCCESS
+
+ @retval EFI_SUCCESS Input completed
+ @retval EFI_ABORTED Editing aborted by the user
+ @retval EFI_INVALID_PARAMETER The string returned by the user is
+ mal-formated
+ @retval EFI_OUT_OF_RESOURCES Fail to perform the operation due to
+ lack of resource
+**/
EFI_STATUS
GetHIInputIP (
- OUT EFI_IP_ADDRESS *Ip
+ OUT EFI_IP_ADDRESS *OutIpAddr
)
{
- CHAR16 CmdLine[255];
- CHAR16 *Str;
EFI_STATUS Status;
+ CHAR16 CmdLine[48];
CmdLine[0] = '\0';
- Status = EditHIInputStr (CmdLine,255);
- if (!EFI_ERROR(Status)) {
- Str = CmdLine;
- Ip->v4.Addr[0] = (UINT8)StrDecimalToUintn (Str);
-
- Str = StrStr (Str, L".");
- if (Str == NULL) {
- return EFI_INVALID_PARAMETER;
- }
+ Status = EditHIInputStr (CmdLine, 48);
+ if (EFI_ERROR (Status)) {
+ return EFI_ABORTED;
+ }
- Ip->v4.Addr[1] = (UINT8)StrDecimalToUintn (++Str);
+ Status = NetLibStrToIp4 (CmdLine, &OutIpAddr->v4);
- Str = StrStr (Str, L".");
- if (Str == NULL) {
- return EFI_INVALID_PARAMETER;
- }
+ return Status;
+}
- Ip->v4.Addr[2] = (UINT8)StrDecimalToUintn (++Str);
+/**
+ Edit an IPv4 address
+
+ The function displays as a string following the "%d.%d.%d.%d" format the
+ IPv4 address that is passed in and asks the user to modify it. If the
+ resulting string defines a valid IPv4 address, the four bytes of the
+ corresponding IPv4 address are extracted from the string and returned by
+ the function.
+
+ @param[in ] EFI_IP_ADDRESS InIpAddr Input IPv4 address
+ @param[out] EFI_IP_ADDRESS OutIpAddr Returned IPv4 address. Valid if
+ and only if the returned value
+ is equal to EFI_SUCCESS
+
+ @retval EFI_SUCCESS Update completed
+ @retval EFI_ABORTED Editing aborted by the user
+ @retval EFI_INVALID_PARAMETER The string returned by the user is
+ mal-formated
+ @retval EFI_OUT_OF_RESOURCES Fail to perform the operation due to
+ lack of resource
+**/
+EFI_STATUS
+EditHIInputIP (
+ IN EFI_IP_ADDRESS *InIpAddr,
+ OUT EFI_IP_ADDRESS *OutIpAddr
+ )
+{
+ EFI_STATUS Status;
+ CHAR16 CmdLine[48];
- Str = StrStr (Str, L".");
- if (Str == NULL) {
- return EFI_INVALID_PARAMETER;
- }
+ UnicodeSPrint (
+ CmdLine, 48, L"%d.%d.%d.%d",
+ InIpAddr->v4.Addr[0], InIpAddr->v4.Addr[1],
+ InIpAddr->v4.Addr[2], InIpAddr->v4.Addr[3]
+ );
- Ip->v4.Addr[3] = (UINT8)StrDecimalToUintn (++Str);
+ Status = EditHIInputStr (CmdLine, 48);
+ if (EFI_ERROR (Status)) {
+ return EFI_ABORTED;
}
+ Status = NetLibStrToIp4 (CmdLine, &OutIpAddr->v4);
+
return Status;
}