public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Ni, Ruiyu" <ruiyu.ni@intel.com>
To: "Shah, Tapan" <tapandshah@hpe.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"Phillips, Chris J (Plano, TX)" <chrisp@hpe.com>
Cc: "Carsey, Jaben" <jaben.carsey@intel.com>,
	"Chen, Chen A" <chen.a.chen@intel.com>
Subject: Re: [PATCH] ShellPkg/dmpstore: Support "-sfo"
Date: Mon, 14 Nov 2016 02:28:38 +0000	[thread overview]
Message-ID: <734D49CCEBEEF84792F5B80ED585239D58E76D29@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <CS1PR84MB0229DB9060EBC27605245878D4BB0@CS1PR84MB0229.NAMPRD84.PROD.OUTLOOK.COM>

Yes I just saw that difference in Spec.
I agree to remove the sfo support for -s and -l.
But I do not think we need to define new SFO table.

I think the V1 patch's implementation can satisfy caller's information needs.
For -s, displaying the variable content in SFO is to tell caller that the exactly same
content is saved to file.
For -l, only displaying the variable content in SFO is to tell caller that the variable
listed in SFO is updated to the content shown in SFO.

Thanks/Ray

> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
> Shah, Tapan
> Sent: Saturday, November 12, 2016 4:43 AM
> To: Ni, Ruiyu <ruiyu.ni@intel.com>; edk2-devel@lists.01.org; Phillips, Chris J
> (Plano, TX) <chrisp@hpe.com>
> Cc: Carsey, Jaben <jaben.carsey@intel.com>; Chen, Chen A
> <chen.a.chen@intel.com>
> Subject: Re: [edk2] [PATCH] ShellPkg/dmpstore: Support "-sfo"
> 
> Ray,
>    Chris and I looked at the patch closely again and saw that your change also
> includes -sfo support for -l and -s flags which is not supported according to
> the latest spec. See below syntax from spec:
> 
> dmpstore [-b] [-d] [-all | (-guid guid)] [variable] [-sfo] dmpstore [-all | (-guid
> guid)] [variable] [-s file] dmpstore [-all | (-guid guid)] [variable] [-l file]
> 
> If we want to include -l and -s support with -sfo flag, then we need to define
> new SFO tables and it requires UEFI Shell spec. update. Currently non-sfo
> mode for -l and -s flags do not display variable data and current -sfo table has
> variable data column defined.
> 
> We also saw that -l/-s -sfo mode suppresses error and that's confusing from
> user prospective as suppressing error does not provide enough information
> to user about what happened for an individual variable. This should be
> handled with new SFO tables for -l/-s flags and do it later after Shell spec.
> update.
> 
> Thanks,
> Tapan
> 
> -----Original Message-----
> From: Shah, Tapan
> Sent: Friday, November 11, 2016 11:21 AM
> To: 'Ruiyu Ni' <ruiyu.ni@intel.com>; edk2-devel@lists.01.org
> Cc: Chen A Chen <chen.a.chen@intel.com>; Jaben Carsey
> <jaben.carsey@intel.com>
> Subject: RE: [PATCH] ShellPkg/dmpstore: Support "-sfo"
> 
> Two comments:
> 1. Missing help output update for -sfo support in dmpstore command.
> 2. BinaryToHexString() is missing input parameter NULL and out of bound size
> check before access.
> 
> -----Original Message-----
> From: Ruiyu Ni [mailto:ruiyu.ni@intel.com]
> Sent: Friday, November 11, 2016 4:14 AM
> To: edk2-devel@lists.01.org
> Cc: Chen A Chen <chen.a.chen@intel.com>; Jaben Carsey
> <jaben.carsey@intel.com>; Shah, Tapan <tapandshah@hpe.com>
> Subject: [PATCH] ShellPkg/dmpstore: Support "-sfo"
> 
> The patch adds the "-sfo" support to "dmpstore" command.
> 
> 1. For "-l" (load variable from file), when the variable content can be updated,
> the new variable data is displayed in SFO format, otherwise, the new variable
> data is not displayed. So that the SFO consumer can know which variables are
> updated by parsing the SFO.
> 
> 2. For "-d" (delete variable), when the variable can be deleted successfully,
> only the variable name and GUID are displayed in SFO but the
> attribute/data/data size are displayed as empty to indicate the deletion
> happened; otherwise, the variable is not displayed.
> 
> 3. For displaying variable, when the variable specified by name and GUID
> cannot be found, an error message is displayed; Otherwise, the SFO is
> displayed.
> E.g.: "dmpstore -guid GuidThatDoesntExist -sfo" produces output
> as:
> ShellCommand,"dmpstore"
> VariableInfo,"","GuidThatDoesntExist","","",""
> 
> "dmpstore NameThatDoesntExist -guid GuidThatDoesntExist -sfo"
> produces output as:
> ShellCommand,"dmpstore"
> dmpstore: No matching variables found. Guid GuidThatDoesntExist, Name
> NameThatDoesntExist
> 
> The difference between the above 2 cases is that former one only specifies
> the GUID, but the latter one specifies both name and GUID.
> Since not specifying GUID means to use GlobalVariableGuid, "dmpstore
> NameThatDoesntExist -sfo" produces the similar output as latter one.
> I personally prefer to always produce SFO output for both cases.
> But the above behavior is the discussion result between HPE engineers.
> 
> Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
> Signed-off-by: Chen A Chen <chen.a.chen@intel.com>
> Cc: Jaben Carsey <jaben.carsey@intel.com>
> Cc: Tapan Shah <tapandshah@hpe.com>
> ---
>  .../Library/UefiShellDebug1CommandsLib/DmpStore.c  | 269
> +++++++++++++++------
>  .../UefiShellDebug1CommandsLib.uni                 |   5 +
>  2 files changed, 202 insertions(+), 72 deletions(-)
> 
> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/DmpStore.c
> b/ShellPkg/Library/UefiShellDebug1CommandsLib/DmpStore.c
> index 3427c99..aa8ad09 100644
> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/DmpStore.c
> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/DmpStore.c
> @@ -2,7 +2,7 @@
>    Main file for DmpStore shell Debug1 function.
> 
>    (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
> -  Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2005 - 2016, Intel Corporation. All rights
> + reserved.<BR>
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of the BSD
> License
>    which accompanies this distribution.  The full text of the license may be
> found at @@ -82,12 +82,46 @@ GetAttrType (  }
> 
>  /**
> +  Convert binary to hex format string.
> +
> +  @param[in]  BufferSize        The size in bytes of the binary data.
> +  @param[in]  Buffer            The binary data.
> +  @param[in, out] HexString     Hex format string.
> +  @param[in]      HexStringSize The size in bytes of the string.
> +
> +  @return The hex format string.
> +**/
> +CHAR16*
> +BinaryToHexString (
> +  IN     VOID    *Buffer,
> +  IN     UINTN   BufferSize,
> +  IN OUT CHAR16  *HexString,
> +  IN     UINTN   HexStringSize
> +  )
> +{
> +  UINTN Index;
> +  UINTN StringIndex;
> +
> +  for (Index = 0, StringIndex = 0; Index < BufferSize; Index += 1) {
> +    StringIndex +=
> +      UnicodeSPrint (
> +        &HexString[StringIndex],
> +        HexStringSize - StringIndex * sizeof (CHAR16),
> +        L"%02x",
> +        ((UINT8 *) Buffer)[Index]
> +        );
> +  }
> +  return HexString;
> +}
> +
> +/**
>    Load the variable data from file and set to variable data base.
> 
> -  @param[in]  FileHandle     The file to be read.
> -  @param[in]  Name           The name of the variables to be loaded.
> -  @param[in]  Guid           The guid of the variables to be loaded.
> -  @param[out] Found          TRUE when at least one variable was loaded and
> set.
> +  @param[in]  FileHandle           The file to be read.
> +  @param[in]  Name                 The name of the variables to be loaded.
> +  @param[in]  Guid                 The guid of the variables to be loaded.
> +  @param[out] Found                TRUE when at least one variable was loaded
> and set.
> +  @param[in]  StandardFormatOutput TRUE indicates Standard-Format
> Output.
> 
>    @retval SHELL_DEVICE_ERROR      Cannot access the file.
>    @retval SHELL_VOLUME_CORRUPTED  The file is in bad format.
> @@ -99,7 +133,8 @@ LoadVariablesFromFile (
>    IN SHELL_FILE_HANDLE FileHandle,
>    IN CONST CHAR16      *Name,
>    IN CONST EFI_GUID    *Guid,
> -  OUT BOOLEAN          *Found
> +  OUT BOOLEAN          *Found,
> +  IN BOOLEAN           StandardFormatOutput
>    )
>  {
>    EFI_STATUS           Status;
> @@ -116,6 +151,7 @@ LoadVariablesFromFile (
>    CHAR16               *Attributes;
>    UINT8                *Buffer;
>    UINT32               Crc32;
> +  CHAR16               *HexString;
> 
>    Status = ShellGetFileSize (FileHandle, &FileSize);
>    if (EFI_ERROR (Status)) {
> @@ -221,11 +257,6 @@ LoadVariablesFromFile (
>          ((Guid == NULL) || CompareGuid (&Variable->Guid, Guid))
>         ) {
>        Attributes = GetAttrType (Variable->Attributes);
> -      ShellPrintHiiEx (
> -        -1, -1, NULL, STRING_TOKEN(STR_DMPSTORE_HEADER_LINE),
> gShellDebug1HiiHandle,
> -        Attributes, &Variable->Guid, Variable->Name, Variable->DataSize
> -        );
> -      SHELL_FREE_NON_NULL(Attributes);
> 
>        *Found = TRUE;
>        Status = gRT->SetVariable (
> @@ -236,8 +267,38 @@ LoadVariablesFromFile (
>                        Variable->Data
>                        );
>        if (EFI_ERROR (Status)) {
> -        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_LOAD_GEN_FAIL), gShellDebug1HiiHandle, L"dmpstore",
> Variable->Name, Status);
> +        if (StandardFormatOutput) {
> +          //
> +          // Supress SFO to indicate the loading is failed.
> +          //
> +        } else {
> +          ShellPrintHiiEx (
> +            -1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_GEN_FAIL),
> gShellDebug1HiiHandle,
> +            L"dmpstore", Variable->Name, Status
> +            );
> +        }
> +      } else {
> +        if (StandardFormatOutput) {
> +          HexString = AllocatePool ((Variable->DataSize * 2 + 1) * sizeof
> (CHAR16));
> +          if (HexString != NULL) {
> +            ShellPrintHiiEx (
> +              -1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_VAR_SFO),
> gShellDebug1HiiHandle,
> +              Variable->Name, &Variable->Guid, Variable->Attributes, Variable-
> >DataSize,
> +              BinaryToHexString (
> +                Variable->Data, Variable->DataSize, HexString,
> +                (Variable->DataSize * 2 + 1) * sizeof (CHAR16)
> +                )
> +              );
> +            FreePool (HexString);
> +          }
> +        } else {
> +          ShellPrintHiiEx (
> +            -1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_HEADER_LINE),
> gShellDebug1HiiHandle,
> +            Attributes, &Variable->Guid, Variable->Name, Variable->DataSize
> +            );
> +        }
>        }
> +      SHELL_FREE_NON_NULL(Attributes);
>      }
>    }
> 
> @@ -350,14 +411,15 @@ AppendSingleVariableToFile (
> 
>    This is necessary since once a delete happens GetNextVariableName() will
> work.
> 
> -  @param[in] Name           The variable name of the EFI variable (or NULL).
> -  @param[in] Guid           The GUID of the variable set (or NULL).
> -  @param[in] Type           The operation type.
> -  @param[in] FileHandle     The file to operate on (or NULL).
> -  @param[in] PrevName       The previous variable name from
> GetNextVariableName. L"" to start.
> -  @param[in] FoundVarGuid   The previous GUID from
> GetNextVariableName. ignored at start.
> -  @param[in] FoundOne       If a VariableName or Guid was specified and one
> was printed or
> -                            deleted, then set this to TRUE, otherwise ignored.
> +  @param[in] Name                 The variable name of the EFI variable (or NULL).
> +  @param[in] Guid                 The GUID of the variable set (or NULL).
> +  @param[in] Type                 The operation type.
> +  @param[in] FileHandle           The file to operate on (or NULL).
> +  @param[in] PrevName             The previous variable name from
> GetNextVariableName. L"" to start.
> +  @param[in] FoundVarGuid         The previous GUID from
> GetNextVariableName. ignored at start.
> +  @param[in] FoundOne             If a VariableName or Guid was specified and
> one was printed or
> +                                  deleted, then set this to TRUE, otherwise ignored.
> +  @param[in] StandardFormatOutput TRUE indicates Standard-Format
> Output.
> 
>    @retval SHELL_SUCCESS           The operation was successful.
>    @retval SHELL_OUT_OF_RESOURCES  A memorty allocation failed.
> @@ -373,7 +435,8 @@ CascadeProcessVariables (
>    IN EFI_FILE_PROTOCOL *FileHandle  OPTIONAL,
>    IN CONST CHAR16      * CONST PrevName,
>    IN EFI_GUID          FoundVarGuid,
> -  IN BOOLEAN           *FoundOne
> +  IN BOOLEAN           *FoundOne,
> +  IN BOOLEAN           StandardFormatOutput
>    )
>  {
>    EFI_STATUS                Status;
> @@ -383,7 +446,8 @@ CascadeProcessVariables (
>    UINT32                    Atts;
>    SHELL_STATUS              ShellStatus;
>    UINTN                     NameSize;
> -  CHAR16                    *RetString;
> +  CHAR16                    *AttrString;
> +  CHAR16                    *HexString;
> 
>    if (ShellGetExecutionBreakFlag()) {
>      return (SHELL_ABORTED);
> @@ -427,7 +491,7 @@ CascadeProcessVariables (
>    //
>    // Recurse to the next iteration.  We know "our" variable's name.
>    //
> -  ShellStatus = CascadeProcessVariables(Name, Guid, Type, FileHandle,
> FoundVarName, FoundVarGuid, FoundOne);
> +  ShellStatus = CascadeProcessVariables (Name, Guid, Type, FileHandle,
> + FoundVarName, FoundVarGuid, FoundOne, StandardFormatOutput);
> 
>    if (ShellGetExecutionBreakFlag() || (ShellStatus == SHELL_ABORTED)) {
>      SHELL_FREE_NON_NULL(FoundVarName);
> @@ -459,50 +523,86 @@ CascadeProcessVariables (
>          Status = gRT->GetVariable (FoundVarName, &FoundVarGuid, &Atts,
> &DataSize, DataBuffer);
>        }
>      }
> -    if ((Type == DmpStoreDisplay) || (Type == DmpStoreSave)) {
>        //
>        // Last error check then print this variable out.
>        //
> +    if (Type == DmpStoreDisplay) {
> +      if (!EFI_ERROR(Status) && (DataBuffer != NULL) && (FoundVarName !=
> NULL)) {
> +        AttrString = GetAttrType(Atts);
> +        if (StandardFormatOutput) {
> +          HexString = AllocatePool ((DataSize * 2 + 1) * sizeof (CHAR16));
> +          if (HexString != NULL) {
> +            ShellPrintHiiEx (
> +              -1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_VAR_SFO),
> gShellDebug1HiiHandle,
> +              FoundVarName, &FoundVarGuid, Atts, DataSize,
> +              BinaryToHexString (
> +                DataBuffer, DataSize, HexString, (DataSize * 2 + 1) * sizeof (CHAR16)
> +                )
> +              );
> +            FreePool (HexString);
> +          } else {
> +            Status = EFI_OUT_OF_RESOURCES;
> +          }
> +        } else {
> +          ShellPrintHiiEx (
> +            -1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_HEADER_LINE),
> gShellDebug1HiiHandle,
> +            AttrString, &FoundVarGuid, FoundVarName, DataSize
> +            );
> +          DumpHex (2, 0, DataSize, DataBuffer);
> +        }
> +        SHELL_FREE_NON_NULL (AttrString);
> +      }
> +    } else if (Type == DmpStoreSave) {
>        if (!EFI_ERROR(Status) && (DataBuffer != NULL) && (FoundVarName !=
> NULL)) {
> -        RetString = GetAttrType(Atts);
> -        ShellPrintHiiEx(
> -          -1,
> -          -1,
> -          NULL,
> -          STRING_TOKEN(STR_DMPSTORE_HEADER_LINE),
> -          gShellDebug1HiiHandle,
> -          RetString,
> -          &FoundVarGuid,
> -          FoundVarName,
> -          DataSize);
> -        if (Type == DmpStoreDisplay) {
> -          DumpHex(2, 0, DataSize, DataBuffer);
> +        AttrString = GetAttrType (Atts);
> +        if (StandardFormatOutput) {
> +          HexString = AllocatePool ((DataSize * 2 + 1) * sizeof (CHAR16));
> +          if (HexString != NULL) {
> +            ShellPrintHiiEx (
> +              -1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_VAR_SFO),
> gShellDebug1HiiHandle,
> +              FoundVarName, &FoundVarGuid, Atts, DataSize,
> +              BinaryToHexString (
> +                DataBuffer, DataSize, HexString, (DataSize * 2 + 1) * sizeof (CHAR16)
> +                )
> +              );
> +            FreePool (HexString);
> +          } else {
> +            Status = EFI_OUT_OF_RESOURCES;
> +          }
>          } else {
> -          Status = AppendSingleVariableToFile (
> -                     FileHandle,
> -                     FoundVarName,
> -                     &FoundVarGuid,
> -                     Atts,
> -                     (UINT32) DataSize,
> -                     DataBuffer
> -                     );
> +          ShellPrintHiiEx (
> +            -1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_HEADER_LINE),
> gShellDebug1HiiHandle,
> +            AttrString, &FoundVarGuid, FoundVarName, DataSize
> +            );
>          }
> -        SHELL_FREE_NON_NULL(RetString);
> +        Status = AppendSingleVariableToFile (
> +                   FileHandle,
> +                   FoundVarName,
> +                   &FoundVarGuid,
> +                   Atts,
> +                   (UINT32) DataSize,
> +                   DataBuffer
> +                   );
> +        SHELL_FREE_NON_NULL (AttrString);
>        }
>      } else if (Type == DmpStoreDelete) {
>        //
>        // We only need name to delete it...
>        //
> -      ShellPrintHiiEx (
> -        -1,
> -        -1,
> -        NULL,
> -        STRING_TOKEN(STR_DMPSTORE_DELETE_LINE),
> -        gShellDebug1HiiHandle,
> -        &FoundVarGuid,
> -        FoundVarName,
> -        gRT->SetVariable (FoundVarName, &FoundVarGuid, Atts, 0, NULL)
> -        );
> +      EFI_STATUS SetStatus = gRT->SetVariable (FoundVarName,
> &FoundVarGuid, Atts, 0, NULL);
> +      if (StandardFormatOutput) {
> +        if (SetStatus == EFI_SUCCESS) {
> +          ShellPrintHiiEx (
> +            -1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_NG_SFO), gShellDebug1HiiHandle,
> +            FoundVarName, &FoundVarGuid
> +            );
> +        }
> +      } else {
> +        ShellPrintHiiEx (
> +          -1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_DELETE_LINE),
> gShellDebug1HiiHandle,
> +          &FoundVarGuid, FoundVarName, SetStatus
> +          );
> +      }
>      }
>      SHELL_FREE_NON_NULL(DataBuffer);
>    }
> @@ -523,10 +623,11 @@ CascadeProcessVariables (
>  /**
>    Function to display or delete variables.  This will set up and call into the
> recursive function.
> 
> -  @param[in] Name        The variable name of the EFI variable (or NULL).
> -  @param[in] Guid        The GUID of the variable set (or NULL).
> -  @param[in] Type        The operation type.
> -  @param[in] FileHandle  The file to save or load variables.
> +  @param[in] Name                 The variable name of the EFI variable (or NULL).
> +  @param[in] Guid                 The GUID of the variable set (or NULL).
> +  @param[in] Type                 The operation type.
> +  @param[in] FileHandle           The file to save or load variables.
> +  @param[in] StandardFormatOutput TRUE indicates Standard-Format
> Output.
> 
>    @retval SHELL_SUCCESS           The operation was successful.
>    @retval SHELL_OUT_OF_RESOURCES  A memorty allocation failed.
> @@ -539,7 +640,8 @@ ProcessVariables (
>    IN CONST CHAR16      *Name      OPTIONAL,
>    IN CONST EFI_GUID    *Guid      OPTIONAL,
>    IN DMP_STORE_TYPE    Type,
> -  IN SHELL_FILE_HANDLE FileHandle OPTIONAL
> +  IN SHELL_FILE_HANDLE FileHandle OPTIONAL,
> +  IN BOOLEAN           StandardFormatOutput
>    )
>  {
>    SHELL_STATUS              ShellStatus;
> @@ -550,10 +652,14 @@ ProcessVariables (
>    ShellStatus   = SHELL_SUCCESS;
>    ZeroMem (&FoundVarGuid, sizeof(EFI_GUID));
> 
> +  if (StandardFormatOutput) {
> +    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_GEN_SFO_HEADER),
> + gShellDebug1HiiHandle, L"dmpstore");  }
> +
>    if (Type == DmpStoreLoad) {
> -    ShellStatus = LoadVariablesFromFile (FileHandle, Name, Guid, &Found);
> +    ShellStatus = LoadVariablesFromFile (FileHandle, Name, Guid,
> + &Found, StandardFormatOutput);
>    } else {
> -    ShellStatus = CascadeProcessVariables(Name, Guid, Type, FileHandle,
> NULL, FoundVarGuid, &Found);
> +    ShellStatus = CascadeProcessVariables (Name, Guid, Type,
> + FileHandle, NULL, FoundVarGuid, &Found, StandardFormatOutput);
>    }
> 
>    if (!Found) {
> @@ -561,13 +667,25 @@ ProcessVariables (
>        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM),
> gShellDebug1HiiHandle, L"dmpstore");
>        return (ShellStatus);
>      } else if (Name != NULL && Guid == NULL) {
> -      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_N), gShellDebug1HiiHandle,
> L"dmpstore", Name);
> +      if (StandardFormatOutput) {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_N_SFO), gShellDebug1HiiHandle,
> Name);
> +      } else {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_N), gShellDebug1HiiHandle,
> L"dmpstore", Name);
> +      }
>      } else if (Name != NULL && Guid != NULL) {
>        ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_GN), gShellDebug1HiiHandle,
> L"dmpstore", Guid, Name);
>      } else if (Name == NULL && Guid == NULL) {
> -      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND), gShellDebug1HiiHandle, L"dmpstore");
> +      if (StandardFormatOutput) {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_SFO), gShellDebug1HiiHandle);
> +      } else {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND), gShellDebug1HiiHandle, L"dmpstore");
> +      }
>      } else if (Name == NULL && Guid != NULL) {
> -      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_G), gShellDebug1HiiHandle,
> L"dmpstore", Guid);
> +      if (StandardFormatOutput) {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_G_SFO), gShellDebug1HiiHandle, Guid);
> +      } else {
> +        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
> (STR_DMPSTORE_NO_VAR_FOUND_G), gShellDebug1HiiHandle,
> L"dmpstore", Guid);
> +      }
>      }
>      return (SHELL_NOT_FOUND);
>    }
> @@ -580,6 +698,7 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
>    {L"-s", TypeValue},
>    {L"-all", TypeFlag},
>    {L"-guid", TypeValue},
> +  {L"-sfo", TypeFlag},
>    {NULL, TypeMax}
>    };
> 
> @@ -608,12 +727,14 @@ ShellCommandRunDmpStore (
>    DMP_STORE_TYPE    Type;
>    SHELL_FILE_HANDLE FileHandle;
>    EFI_FILE_INFO     *FileInfo;
> +  BOOLEAN           StandardFormatOutput;
> 
> -  ShellStatus   = SHELL_SUCCESS;
> -  Package       = NULL;
> -  FileHandle    = NULL;
> -  File          = NULL;
> -  Type          = DmpStoreDisplay;
> +  ShellStatus          = SHELL_SUCCESS;
> +  Package              = NULL;
> +  FileHandle           = NULL;
> +  File                 = NULL;
> +  Type                 = DmpStoreDisplay;
> +  StandardFormatOutput = FALSE;
> 
>    Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam,
> TRUE);
>    if (EFI_ERROR(Status)) {
> @@ -742,6 +863,10 @@ ShellCommandRunDmpStore (
>          } else if (ShellCommandLineGetFlag(Package, L"-d")) {
>            Type = DmpStoreDelete;
>          }
> +
> +        if (ShellCommandLineGetFlag (Package,L"-sfo")) {
> +          StandardFormatOutput = TRUE;
> +        }
>        }
> 
>        if (ShellStatus == SHELL_SUCCESS) { @@ -750,7 +875,7 @@
> ShellCommandRunDmpStore (
>          } else if (Type == DmpStoreLoad) {
>            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD),
> gShellDebug1HiiHandle, File);
>          }
> -        ShellStatus = ProcessVariables (Name, Guid, Type, FileHandle);
> +        ShellStatus = ProcessVariables (Name, Guid, Type, FileHandle,
> + StandardFormatOutput);
>          if ((Type == DmpStoreLoad) || (Type == DmpStoreSave)) {
>            ShellCloseFile (&FileHandle);
>          }
> diff --git
> a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comman
> dsLib.uni
> b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comman
> dsLib.uni
> index 52c2af0..c97bd62 100644
> ---
> a/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comman
> dsLib.uni
> +++
> b/ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1Comman
> d
> +++ sLib.uni
> @@ -407,9 +407,14 @@
>  #string STR_DMPSTORE_HEADER_LINE       #language en-US
> "Variable %H%s%N '%H%g%N:%H%s%N' DataSize = 0x%02x\r\n"
>  #string STR_DMPSTORE_DELETE_LINE       #language en-US "Delete variable
> '%H%g%N:%H%s%N': %r\r\n"
>  #string STR_DMPSTORE_NO_VAR_FOUND      #language en-US "%H%s%N:
> No matching variables found.\r\n"
> +#string STR_DMPSTORE_NO_VAR_FOUND_SFO  #language en-US
> "VariableInfo,\"\",\"\",\"\",\"\",\"\"\r\n"
>  #string STR_DMPSTORE_NO_VAR_FOUND_GN   #language en-US
> "%H%s%N: No matching variables found. Guid %g, Name %s\r\n"
> +#string STR_DMPSTORE_NO_VAR_FOUND_NG_SFO #language en-US
> "VariableInfo,\"%s\",\"%g\",\"\",\"\",\"\"\r\n"
>  #string STR_DMPSTORE_NO_VAR_FOUND_N    #language en-US "%H%s%N:
> No matching variables found. Name %s\r\n"
> +#string STR_DMPSTORE_NO_VAR_FOUND_N_SFO #language en-US
> #language en-US "VariableInfo,\"%s\",\"\",\"\",\"\",\"\"\r\n"
>  #string STR_DMPSTORE_NO_VAR_FOUND_G    #language en-US "%H%s%N:
> No matching variables found. Guid %g\r\n"
> +#string STR_DMPSTORE_NO_VAR_FOUND_G_SFO #language en-US
> "VariableInfo,\"\",\"%g\",\"\",\"\",\"\"\r\n"
> +#string STR_DMPSTORE_VAR_SFO           #language en-US
> "VariableInfo,\"%s\",\"%g\",\"0x%x\",\"0x%x\",\"%s\"\r\n"
> 
>  #string STR_GET_HELP_COMP         #language en-US ""
>  ".TH comp 0 "Compare 2 files"\r\n"
> --
> 2.9.0.windows.1
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel


      reply	other threads:[~2016-11-14  2:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-11 10:14 [PATCH] ShellPkg/dmpstore: Support "-sfo" Ruiyu Ni
2016-11-11 14:20 ` Carsey, Jaben
2016-11-11 17:21 ` Shah, Tapan
2016-11-14  2:24   ` Ni, Ruiyu
2016-11-11 20:43 ` Shah, Tapan
2016-11-14  2:28   ` Ni, Ruiyu [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=734D49CCEBEEF84792F5B80ED585239D58E76D29@SHSMSX104.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox