From 78d42190ce066d36909ec63b213b37dc04b9f2c4 Mon Sep 17 00:00:00 2001 From: Chris Phillips Date: Thu, 21 Aug 2014 20:28:32 +0000 Subject: [PATCH] ShellPkg: Fixes and updates for the 'parse' command - Fix SFO file parsing to match UEFI Shell 2.1 spec - Update help output for easier viewing Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chris Phillips Reviewed-by: Jaben Carsey git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15873 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UefiShellLevel2CommandsLib/Parse.c | 74 ++++++++++-------- .../UefiShellLevel2CommandsLib.uni | Bin 113196 -> 114538 bytes 2 files changed, 41 insertions(+), 33 deletions(-) diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c index 4072b9469d..3b7a04f7a0 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Parse.c @@ -1,6 +1,7 @@ /** @file Main file for Parse shell level 2 function. + (C) Copyright 2013-2014, Hewlett-Packard Development Company, L.P. Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -56,13 +57,22 @@ PerformParsing( if (EFI_ERROR(Status)) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel2HiiHandle, FileName); ShellStatus = SHELL_NOT_FOUND; + } else if (!EFI_ERROR (FileHandleIsDirectory (FileHandle))) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_FILE), gShellLevel2HiiHandle, FileName); + ShellStatus = SHELL_NOT_FOUND; } else { for (LoopVariable = 0 ; LoopVariable < ShellCommandInstance && !ShellFileHandleEof(FileHandle);) { TempLine = ShellFileHandleReturnLine(FileHandle, &Ascii); if (TempLine == NULL) { break; } - if (StrStr(TempLine, L"ShellCommand, \"") == TempLine) { + + // + // Search for "ShellCommand," in the file to start the SFO table + // for a given ShellCommand. The UEFI Shell spec does not specify + // a space after the comma. + // + if (StrStr (TempLine, L"ShellCommand,") == TempLine) { LoopVariable++; } SHELL_FREE_NON_NULL(TempLine); @@ -71,45 +81,43 @@ PerformParsing( LoopVariable = 0; while(1) { TempLine = ShellFileHandleReturnLine(FileHandle, &Ascii); - if ( TempLine == NULL - || *TempLine == CHAR_NULL - || StrStr(TempLine, L"ShellCommand, \"") == TempLine - ){ + if (TempLine == NULL + || *TempLine == CHAR_NULL + || StrStr (TempLine, L"ShellCommand,") == TempLine) { SHELL_FREE_NON_NULL(TempLine); break; } - if (StrStr(TempLine, TableName) == TempLine) { + if (StrStr (TempLine, TableName) == TempLine) { LoopVariable++; - } - if ( LoopVariable == TableNameInstance - || (TableNameInstance == (UINTN)-1 && StrStr(TempLine, TableName) == TempLine) - ){ - for (ColumnLoop = 1, ColumnPointer = TempLine; ColumnLoop < ColumnIndex && ColumnPointer != NULL && *ColumnPointer != CHAR_NULL; ColumnLoop++) { - ColumnPointer = StrStr(ColumnPointer, L","); - if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL){ - ColumnPointer++; - } - } - if (ColumnLoop == ColumnIndex) { - if (ColumnPointer == NULL) { - ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellLevel2HiiHandle, L"Column Index"); - ShellStatus = SHELL_INVALID_PARAMETER; - } else { - TempSpot = StrStr(ColumnPointer, L","); - if (TempSpot != NULL) { - *TempSpot = CHAR_NULL; - } - while (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L' '){ - ColumnPointer++; - } - if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L'\"'){ + if (LoopVariable == TableNameInstance + || (TableNameInstance == (UINTN)-1)) { + for (ColumnLoop = 1, ColumnPointer = TempLine; ColumnLoop < ColumnIndex && ColumnPointer != NULL && *ColumnPointer != CHAR_NULL; ColumnLoop++) { + ColumnPointer = StrStr (ColumnPointer, L","); + if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL){ ColumnPointer++; } - if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[StrLen(ColumnPointer)-1] == L'\"'){ - ColumnPointer[StrLen(ColumnPointer)-1] = CHAR_NULL; + } + if (ColumnLoop == ColumnIndex) { + if (ColumnPointer == NULL) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellLevel2HiiHandle, L"Column Index"); + ShellStatus = SHELL_INVALID_PARAMETER; + } else { + TempSpot = StrStr (ColumnPointer, L","); + if (TempSpot != NULL) { + *TempSpot = CHAR_NULL; + } + while (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L' '){ + ColumnPointer++; + } + if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[0] == L'\"'){ + ColumnPointer++; + } + if (ColumnPointer != NULL && *ColumnPointer != CHAR_NULL && ColumnPointer[StrLen (ColumnPointer) - 1] == L'\"'){ + ColumnPointer[StrLen (ColumnPointer) - 1] = CHAR_NULL; + } + + ShellPrintEx (-1, -1, L"%s\r\n", ColumnPointer); } - - ShellPrintEx(-1, -1, L"%s\r\n", ColumnPointer); } } } diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni index 464c21818997a82dc563428facdd6e065059d6b7..dd07cf04ff7fcf186d4605e74a4769f625a0b459 100644 GIT binary patch delta 1511 zcmcgsOGuPa6h60kq()}HI?m`Mzt%!z9Ot32&NpLCCnlxH4R_s*rWw!7=^S* zk9BuFBvjCaAk-pP5iQ(gizosq6Dr&Zp-w*P++SxTv9O@{`G5X)LUjPID59pbT^NpTbDpk?>lmhX$wtGZr7RPWW_h-=j1ng}b2uN}v=9v3zlqEV}+B zBTK^zXyEhLSp?=UMd61|HF^WmJ{f{f8a6IfqC6UAXn=NTgr?BW7GiG6&#N!97`*D2 z@z!z~PLFBv<8nNCUt8`#+h7Kc1nPKiH#1_(J3XpIDf*)VRc53dcxGasK#VFqqVV_KYAtHn=~QRtqGK-+phf7Hn~7BAL&(LE!J zU7kX)ab+Vk@ATQWs^bf#X!V zT3Vab#C@8gd|^1f>f>vmQy3LgZvgx>8abg8q$SP_k_RM6nfRzv%r-h$fdV}Af^_TdR-3H(b zqb&L_i9S`c^e&NpHYFCM8BFaT6Abc`sV={*V2Ggok2?t-JUAQ69U3Ne{oKp{OcHVv zcSDlYBTtNggRW#7w9qB5f(}~mbm3(<8yW+l9yWUGp$U`5qWN+9P8n=3{r2egt>^|5{kPE|iHY%voZuW;{7{eS0Ryx1 zq#MkDj^QYgnM>SUO%_dBCU&CZ`mxGxtj!_1j8bI$zQ)!zKkN|tB6 zx4ZK7P?{zvLo*b`@#<^*sOmUX@WEU2VXW@N%dAJ0*4T^H`7SKfPM}oN@vY)OrIt{I z0q)1_<~TlY>TKZs)=gZj_aO41AJ6J0a@$Ts=K9pnAUkn;YeW^NSi_yF`+z|W^z>na zESVmm1VvS_gS(er>9Dr*NauaHEJMb3OnliXAh-Kion2)eD<3qB?!}gugt4-hU(WDi zIedn1aM>HprI2c@hXgJvg6zpo>lw8L2Rqw}K%?{l}xGH2Ar8aps|tAh=7 z$;KhIVB>Sa5sEi5jFNyEM3v~nA&LP T-nI~(rvbcpd!an)VE_7G<;BGF -- 2.39.2