Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c
- Timestamp:
- Apr 14, 2023 3:17:44 PM (23 months ago)
- svn:sync-xref-src-repo-rev:
- 156854
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-145445 /vendor/edk2/current 103735-103757,103769-103776,129194-156846
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c
r80721 r99404 23 23 ) 24 24 { 25 SHELL_FILE_HANDLE FileHandle;26 EFI_STATUS Status;27 CHAR16 CharBuffer;28 UINTN CharSize;29 UINT64 OriginalFilePosition;25 SHELL_FILE_HANDLE FileHandle; 26 EFI_STATUS Status; 27 CHAR16 CharBuffer; 28 UINTN CharSize; 29 UINT64 OriginalFilePosition; 30 30 31 31 Status = EFI_SUCCESS; … … 34 34 35 35 if (ShellOpenFileByName (L">i", &FileHandle, EFI_FILE_MODE_READ, 0) == EFI_SUCCESS) { 36 CharSize = sizeof (CHAR16);36 CharSize = sizeof (CHAR16); 37 37 gEfiShellProtocol->GetFilePosition (FileHandle, &OriginalFilePosition); 38 38 Status = gEfiShellProtocol->ReadFile (FileHandle, &CharSize, &CharBuffer); 39 if (EFI_ERROR (Status) || (CharSize != sizeof (CHAR16))) {39 if (EFI_ERROR (Status) || (CharSize != sizeof (CHAR16))) { 40 40 return FALSE; 41 41 } 42 gEfiShellProtocol->SetFilePosition(FileHandle, OriginalFilePosition); 42 43 gEfiShellProtocol->SetFilePosition (FileHandle, OriginalFilePosition); 43 44 } 44 45 … … 79 80 return NULL; 80 81 } 82 81 83 ReturnStr = NewStr; 82 84 StrWalker = String; 83 85 while (*StrWalker != CHAR_NULL) { 84 if ( *StrWalker == L'^' && (*(StrWalker + 1) == L'^' || *(StrWalker + 1) == L'"')) {86 if ((*StrWalker == L'^') && ((*(StrWalker + 1) == L'^') || (*(StrWalker + 1) == L'"'))) { 85 87 *NewStr = *(StrWalker + 1); 86 88 StrWalker++; … … 88 90 *NewStr = *StrWalker; 89 91 } 92 90 93 StrWalker++; 91 94 NewStr++; … … 94 97 return ReturnStr; 95 98 } 96 97 99 98 100 /** … … 111 113 **/ 112 114 SHELL_STATUS 113 PerformParsing (114 IN CONST CHAR16 *FileName,115 IN CONST CHAR16 *TableName,116 IN CONST UINTN ColumnIndex,117 IN CONST UINTN TableNameInstance,118 IN CONST UINTN ShellCommandInstance,119 IN BOOLEAN StreamingUnicode115 PerformParsing ( 116 IN CONST CHAR16 *FileName, 117 IN CONST CHAR16 *TableName, 118 IN CONST UINTN ColumnIndex, 119 IN CONST UINTN TableNameInstance, 120 IN CONST UINTN ShellCommandInstance, 121 IN BOOLEAN StreamingUnicode 120 122 ) 121 123 { 122 SHELL_FILE_HANDLE FileHandle;123 EFI_STATUS Status;124 BOOLEAN Ascii;125 UINTN LoopVariable;126 UINTN ColumnLoop;127 CHAR16 *TempLine;128 CHAR16 *ColumnPointer;129 SHELL_STATUS ShellStatus;130 CHAR16 *TempSpot;131 CHAR16 *SfoString;132 133 ASSERT (FileName != NULL);134 ASSERT (TableName != NULL);135 136 ShellStatus 137 138 Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ, 0);139 if (EFI_ERROR (Status)) {140 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel2HiiHandle, L"parse", FileName);124 SHELL_FILE_HANDLE FileHandle; 125 EFI_STATUS Status; 126 BOOLEAN Ascii; 127 UINTN LoopVariable; 128 UINTN ColumnLoop; 129 CHAR16 *TempLine; 130 CHAR16 *ColumnPointer; 131 SHELL_STATUS ShellStatus; 132 CHAR16 *TempSpot; 133 CHAR16 *SfoString; 134 135 ASSERT (FileName != NULL); 136 ASSERT (TableName != NULL); 137 138 ShellStatus = SHELL_SUCCESS; 139 140 Status = ShellOpenFileByName (FileName, &FileHandle, EFI_FILE_MODE_READ, 0); 141 if (EFI_ERROR (Status)) { 142 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel2HiiHandle, L"parse", FileName); 141 143 ShellStatus = SHELL_NOT_FOUND; 142 144 } else if (!EFI_ERROR (FileHandleIsDirectory (FileHandle))) { … … 144 146 ShellStatus = SHELL_NOT_FOUND; 145 147 } else { 146 for (LoopVariable = 0 ; LoopVariable < ShellCommandInstance && !ShellFileHandleEof(FileHandle);) {147 TempLine = ShellFileHandleReturnLine (FileHandle, &Ascii);148 149 if ((TempLine == NULL) || ( *TempLine == CHAR_NULL&& StreamingUnicode)) {150 148 for (LoopVariable = 0; LoopVariable < ShellCommandInstance && !ShellFileHandleEof (FileHandle);) { 149 TempLine = ShellFileHandleReturnLine (FileHandle, &Ascii); 150 151 if ((TempLine == NULL) || ((*TempLine == CHAR_NULL) && StreamingUnicode)) { 152 break; 151 153 } 152 154 … … 159 161 LoopVariable++; 160 162 } 161 SHELL_FREE_NON_NULL(TempLine); 162 } 163 164 SHELL_FREE_NON_NULL (TempLine); 165 } 166 163 167 if (LoopVariable == ShellCommandInstance) { 164 168 LoopVariable = 0; 165 while (1) {169 while (1) { 166 170 TempLine = ShellFileHandleReturnLine (FileHandle, &Ascii); 167 if (TempLine == NULL 168 || *TempLine == CHAR_NULL 169 || StrStr (TempLine, L"ShellCommand,") == TempLine) { 170 SHELL_FREE_NON_NULL(TempLine); 171 if ( (TempLine == NULL) 172 || (*TempLine == CHAR_NULL) 173 || (StrStr (TempLine, L"ShellCommand,") == TempLine)) 174 { 175 SHELL_FREE_NON_NULL (TempLine); 171 176 break; 172 177 } 178 173 179 if (StrStr (TempLine, TableName) == TempLine) { 174 180 LoopVariable++; 175 if (LoopVariable == TableNameInstance 176 || (TableNameInstance == (UINTN)-1)) { 181 if ( (LoopVariable == TableNameInstance) 182 || (TableNameInstance == (UINTN)-1)) 183 { 177 184 for (ColumnLoop = 1, ColumnPointer = TempLine; ColumnLoop < ColumnIndex && ColumnPointer != NULL && *ColumnPointer != CHAR_NULL; ColumnLoop++) { 178 185 ColumnPointer = StrStr (ColumnPointer, L",\""); 179 if ( ColumnPointer != NULL && *ColumnPointer != CHAR_NULL){186 if ((ColumnPointer != NULL) && (*ColumnPointer != CHAR_NULL)) { 180 187 ColumnPointer++; 181 188 } 182 189 } 190 183 191 if (ColumnLoop == ColumnIndex) { 184 192 if (ColumnPointer == NULL) { 185 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellLevel2HiiHandle, L"parse", L"Column Index");193 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellLevel2HiiHandle, L"parse", L"Column Index"); 186 194 ShellStatus = SHELL_INVALID_PARAMETER; 187 195 } else { … … 190 198 *TempSpot = CHAR_NULL; 191 199 } 192 while (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L' '){ 200 201 while (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L' ') { 193 202 ColumnPointer++; 194 203 } 195 if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L'\"'){ 204 205 if ((ColumnPointer != NULL) && (*ColumnPointer != CHAR_NULL) && (ColumnPointer[0] == L'\"')) { 196 206 ColumnPointer++; 197 207 } 198 if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[StrLen (ColumnPointer) - 1] == L'\"'){ 208 209 if ((ColumnPointer != NULL) && (*ColumnPointer != CHAR_NULL) && (ColumnPointer[StrLen (ColumnPointer) - 1] == L'\"')) { 199 210 ColumnPointer[StrLen (ColumnPointer) - 1] = CHAR_NULL; 200 211 } 212 201 213 SfoString = HandleStringWithEscapeCharForParse (ColumnPointer); 202 214 if (SfoString != NULL) { … … 208 220 } 209 221 } 210 SHELL_FREE_NON_NULL(TempLine); 211 } 212 } 213 } 222 223 SHELL_FREE_NON_NULL (TempLine); 224 } 225 } 226 } 227 214 228 return (ShellStatus); 215 229 } 216 230 217 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {218 { L"-i", TypeValue},219 { L"-s", TypeValue},220 { NULL, TypeMax}221 231 STATIC CONST SHELL_PARAM_ITEM ParamList[] = { 232 { L"-i", TypeValue }, 233 { L"-s", TypeValue }, 234 { NULL, TypeMax } 235 }; 222 236 223 237 /** … … 234 248 ) 235 249 { 236 EFI_STATUS 237 LIST_ENTRY 238 CHAR16 239 CONST CHAR16 240 CONST CHAR16 241 CONST CHAR16 242 SHELL_STATUS 243 UINTN 244 UINTN 245 BOOLEAN 250 EFI_STATUS Status; 251 LIST_ENTRY *Package; 252 CHAR16 *ProblemParam; 253 CONST CHAR16 *FileName; 254 CONST CHAR16 *TableName; 255 CONST CHAR16 *ColumnString; 256 SHELL_STATUS ShellStatus; 257 UINTN ShellCommandInstance; 258 UINTN TableNameInstance; 259 BOOLEAN StreamingUnicode; 246 260 247 261 ShellStatus = SHELL_SUCCESS; … … 252 266 // initialize the shell lib (we must be in non-auto-init...) 253 267 // 254 Status = ShellInitialize ();255 ASSERT_EFI_ERROR (Status);268 Status = ShellInitialize (); 269 ASSERT_EFI_ERROR (Status); 256 270 257 271 // … … 259 273 // 260 274 Status = ShellCommandLineParseEx (ParamList, &Package, &ProblemParam, TRUE, FALSE); 261 if (EFI_ERROR (Status)) {262 if ( Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {263 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"parse", ProblemParam);264 FreePool (ProblemParam);275 if (EFI_ERROR (Status)) { 276 if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) { 277 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"parse", ProblemParam); 278 FreePool (ProblemParam); 265 279 ShellStatus = SHELL_INVALID_PARAMETER; 266 280 } else { 267 ASSERT (FALSE);281 ASSERT (FALSE); 268 282 } 269 283 } else { 270 284 StreamingUnicode = IsStdInDataAvailable (); 271 if ((!StreamingUnicode && (ShellCommandLineGetCount(Package) < 4)) || 272 (ShellCommandLineGetCount(Package) < 3)) { 273 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel2HiiHandle, L"parse"); 285 if ((!StreamingUnicode && (ShellCommandLineGetCount (Package) < 4)) || 286 (ShellCommandLineGetCount (Package) < 3)) 287 { 288 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel2HiiHandle, L"parse"); 274 289 ShellStatus = SHELL_INVALID_PARAMETER; 275 } else if ((StreamingUnicode && (ShellCommandLineGetCount(Package) > 3)) || 276 (ShellCommandLineGetCount(Package) > 4)) { 277 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"parse"); 290 } else if ((StreamingUnicode && (ShellCommandLineGetCount (Package) > 3)) || 291 (ShellCommandLineGetCount (Package) > 4)) 292 { 293 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"parse"); 278 294 ShellStatus = SHELL_INVALID_PARAMETER; 279 295 } else { 280 296 if (StreamingUnicode) { 281 FileName 282 TableName = ShellCommandLineGetRawValue(Package, 1);283 ColumnString = ShellCommandLineGetRawValue(Package, 2);297 FileName = L">i"; 298 TableName = ShellCommandLineGetRawValue (Package, 1); 299 ColumnString = ShellCommandLineGetRawValue (Package, 2); 284 300 } else { 285 FileName = ShellCommandLineGetRawValue(Package, 1); 286 TableName = ShellCommandLineGetRawValue(Package, 2); 287 ColumnString = ShellCommandLineGetRawValue(Package, 3); 288 } 289 if (ShellCommandLineGetValue(Package, L"-i") == NULL) { 301 FileName = ShellCommandLineGetRawValue (Package, 1); 302 TableName = ShellCommandLineGetRawValue (Package, 2); 303 ColumnString = ShellCommandLineGetRawValue (Package, 3); 304 } 305 306 if (ShellCommandLineGetValue (Package, L"-i") == NULL) { 290 307 TableNameInstance = (UINTN)-1; 291 308 } else { 292 TableNameInstance = ShellStrToUintn(ShellCommandLineGetValue(Package, L"-i")); 293 } 294 if (ShellCommandLineGetValue(Package, L"-s") == NULL) { 309 TableNameInstance = ShellStrToUintn (ShellCommandLineGetValue (Package, L"-i")); 310 } 311 312 if (ShellCommandLineGetValue (Package, L"-s") == NULL) { 295 313 ShellCommandInstance = 1; 296 314 } else { 297 ShellCommandInstance = ShellStrToUintn (ShellCommandLineGetValue(Package, L"-s"));298 } 299 300 ShellStatus = PerformParsing (FileName, TableName, ShellStrToUintn(ColumnString), TableNameInstance, ShellCommandInstance, StreamingUnicode);315 ShellCommandInstance = ShellStrToUintn (ShellCommandLineGetValue (Package, L"-s")); 316 } 317 318 ShellStatus = PerformParsing (FileName, TableName, ShellStrToUintn (ColumnString), TableNameInstance, ShellCommandInstance, StreamingUnicode); 301 319 } 302 320 } … … 309 327 return (ShellStatus); 310 328 } 311
Note:
See TracChangeset
for help on using the changeset viewer.