]> git.proxmox.com Git - mirror_edk2.git/blame - ShellPkg/Library/UefiShellDebug1CommandsLib/SetSize.c
ShellPkg: Update Level1 profile commands response output
[mirror_edk2.git] / ShellPkg / Library / UefiShellDebug1CommandsLib / SetSize.c
CommitLineData
5d73d92f 1/** @file\r
2 Main file for SetSize shell Debug1 function.\r
3\r
3737ac2b 4 Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
5d73d92f 5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "UefiShellDebug1CommandsLib.h"\r
16\r
3737ac2b 17/**\r
18 Function for 'setsize' command.\r
19\r
20 @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
21 @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
22**/\r
5d73d92f 23SHELL_STATUS\r
24EFIAPI\r
25ShellCommandRunSetSize (\r
26 IN EFI_HANDLE ImageHandle,\r
27 IN EFI_SYSTEM_TABLE *SystemTable\r
28 )\r
29{\r
30 EFI_STATUS Status;\r
31 LIST_ENTRY *Package;\r
32 CHAR16 *ProblemParam;\r
33 SHELL_STATUS ShellStatus;\r
34 CONST CHAR16 *Temp1;\r
35 UINTN NewSize;\r
36 UINTN LoopVar;\r
37 SHELL_FILE_HANDLE FileHandle;\r
38\r
39 ShellStatus = SHELL_SUCCESS;\r
40 Status = EFI_SUCCESS;\r
41\r
42 //\r
43 // initialize the shell lib (we must be in non-auto-init...)\r
44 //\r
45 Status = ShellInitialize();\r
46 ASSERT_EFI_ERROR(Status);\r
47\r
48 Status = CommandInit();\r
49 ASSERT_EFI_ERROR(Status);\r
50\r
51 //\r
52 // parse the command line\r
53 //\r
54 Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);\r
55 if (EFI_ERROR(Status)) {\r
56 if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
57 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, ProblemParam);\r
58 FreePool(ProblemParam);\r
59 ShellStatus = SHELL_INVALID_PARAMETER;\r
60 } else {\r
61 ASSERT(FALSE);\r
62 }\r
63 } else {\r
3737ac2b 64 if (ShellCommandLineGetCount(Package) < 3) {\r
65 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
5d73d92f 66 ShellStatus = SHELL_INVALID_PARAMETER;\r
67 NewSize = 0;\r
68 } else {\r
3737ac2b 69 Temp1 = ShellCommandLineGetRawValue(Package, 1);\r
70 if (!ShellIsHexOrDecimalNumber(Temp1, FALSE, FALSE)) {\r
71 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SIZE_NOT_SPEC), gShellDebug1HiiHandle);\r
72 ShellStatus = SHELL_INVALID_PARAMETER;\r
73 NewSize = 0;\r
74 } else {\r
75 NewSize = ShellStrToUintn(Temp1);\r
76 }\r
5d73d92f 77 }\r
78 for (LoopVar = 2 ; LoopVar < ShellCommandLineGetCount(Package) && ShellStatus == SHELL_SUCCESS ; LoopVar++) {\r
3737ac2b 79 Status = ShellOpenFileByName(ShellCommandLineGetRawValue(Package, LoopVar), &FileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0);\r
80 if (EFI_ERROR(Status)) {\r
81 Status = ShellOpenFileByName(ShellCommandLineGetRawValue(Package, LoopVar), &FileHandle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE|EFI_FILE_MODE_CREATE, 0);\r
82 }\r
5d73d92f 83 if (EFI_ERROR(Status) && LoopVar == 2) {\r
84 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_SPEC), gShellDebug1HiiHandle);\r
85 ShellStatus = SHELL_INVALID_PARAMETER;\r
86 } else if (EFI_ERROR(Status)) {\r
3737ac2b 87 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_OPEN_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, LoopVar), Status);\r
88 ShellStatus = SHELL_INVALID_PARAMETER;\r
5d73d92f 89 break;\r
90 } else {\r
91 Status = FileHandleSetSize(FileHandle, NewSize);\r
92 if (Status == EFI_VOLUME_FULL) {\r
93 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_VOLUME_FULL), gShellDebug1HiiHandle);\r
94 ShellStatus = SHELL_VOLUME_FULL;\r
95 } else if (EFI_ERROR(Status)) {\r
96 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_SIZE_FAIL), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, LoopVar), Status);\r
97 ShellStatus = SHELL_INVALID_PARAMETER;\r
3737ac2b 98 } else {\r
99 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SET_SIZE_DONE), gShellDebug1HiiHandle, ShellCommandLineGetRawValue(Package, LoopVar));\r
5d73d92f 100 }\r
101 ShellCloseFile(&FileHandle);\r
102 }\r
103 }\r
104\r
105 ShellCommandLineFreeVarList (Package);\r
106 }\r
107\r
108 return (ShellStatus);\r
109}\r