2 Main file for SetSize shell Debug1 function.
4 (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
5 Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #include "UefiShellDebug1CommandsLib.h"
13 Function for 'setsize' command.
15 @param[in] ImageHandle Handle to the Image (NULL if Internal).
16 @param[in] SystemTable Pointer to the System Table (NULL if Internal).
20 ShellCommandRunSetSize (
21 IN EFI_HANDLE ImageHandle
,
22 IN EFI_SYSTEM_TABLE
*SystemTable
28 SHELL_STATUS ShellStatus
;
32 SHELL_FILE_HANDLE FileHandle
;
34 ShellStatus
= SHELL_SUCCESS
;
38 // initialize the shell lib (we must be in non-auto-init...)
40 Status
= ShellInitialize ();
41 ASSERT_EFI_ERROR (Status
);
43 Status
= CommandInit ();
44 ASSERT_EFI_ERROR (Status
);
47 // parse the command line
49 Status
= ShellCommandLineParse (EmptyParamList
, &Package
, &ProblemParam
, TRUE
);
50 if (EFI_ERROR (Status
)) {
51 if ((Status
== EFI_VOLUME_CORRUPTED
) && (ProblemParam
!= NULL
)) {
52 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_PROBLEM
), gShellDebug1HiiHandle
, L
"setsize", ProblemParam
);
53 FreePool (ProblemParam
);
54 ShellStatus
= SHELL_INVALID_PARAMETER
;
59 if (ShellCommandLineGetCount (Package
) < 3) {
60 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_TOO_FEW
), gShellDebug1HiiHandle
, L
"setsize");
61 ShellStatus
= SHELL_INVALID_PARAMETER
;
64 Temp1
= ShellCommandLineGetRawValue (Package
, 1);
65 if (!ShellIsHexOrDecimalNumber (Temp1
, FALSE
, FALSE
)) {
66 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_SIZE_NOT_SPEC
), gShellDebug1HiiHandle
, L
"setsize");
67 ShellStatus
= SHELL_INVALID_PARAMETER
;
70 NewSize
= ShellStrToUintn (Temp1
);
74 for (LoopVar
= 2; LoopVar
< ShellCommandLineGetCount (Package
) && ShellStatus
== SHELL_SUCCESS
; LoopVar
++) {
75 Status
= ShellOpenFileByName (ShellCommandLineGetRawValue (Package
, LoopVar
), &FileHandle
, EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
, 0);
76 if (EFI_ERROR (Status
)) {
77 Status
= ShellOpenFileByName (ShellCommandLineGetRawValue (Package
, LoopVar
), &FileHandle
, EFI_FILE_MODE_READ
|EFI_FILE_MODE_WRITE
|EFI_FILE_MODE_CREATE
, 0);
80 if (EFI_ERROR (Status
) && (LoopVar
== 2)) {
81 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_FILE_NOT_SPEC
), gShellDebug1HiiHandle
, L
"setsize");
82 ShellStatus
= SHELL_INVALID_PARAMETER
;
83 } else if (EFI_ERROR (Status
)) {
84 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL
), gShellDebug1HiiHandle
, L
"setsize", ShellCommandLineGetRawValue (Package
, LoopVar
));
85 ShellStatus
= SHELL_INVALID_PARAMETER
;
88 Status
= FileHandleSetSize (FileHandle
, NewSize
);
89 if (Status
== EFI_VOLUME_FULL
) {
90 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_VOLUME_FULL
), gShellDebug1HiiHandle
, L
"setsize");
91 ShellStatus
= SHELL_VOLUME_FULL
;
92 } else if (EFI_ERROR (Status
)) {
93 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_SET_SIZE_FAIL
), gShellDebug1HiiHandle
, L
"setsize", ShellCommandLineGetRawValue (Package
, LoopVar
));
94 ShellStatus
= SHELL_INVALID_PARAMETER
;
96 ShellPrintHiiEx (-1, -1, NULL
, STRING_TOKEN (STR_SET_SIZE_DONE
), gShellDebug1HiiHandle
, ShellCommandLineGetRawValue (Package
, LoopVar
));
99 ShellCloseFile (&FileHandle
);
103 ShellCommandLineFreeVarList (Package
);
106 return (ShellStatus
);