/** @file\r
Main file for vol shell level 2 function.\r
\r
- Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>\r
+ (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+ Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
@retval SHELL_SUCCESS The operation was sucessful.\r
**/\r
SHELL_STATUS\r
-EFIAPI\r
HandleVol(\r
IN CONST CHAR16 *Path,\r
IN CONST BOOLEAN Delete,\r
- IN CONST CHAR16 *Name\r
+ IN CONST CHAR16 *Name OPTIONAL\r
)\r
{\r
EFI_STATUS Status;\r
\r
ShellStatus = SHELL_SUCCESS;\r
\r
+ if (\r
+ Name != NULL && (\r
+ StrStr(Name, L"%") != NULL ||\r
+ StrStr(Name, L"^") != NULL ||\r
+ StrStr(Name, L"*") != NULL ||\r
+ StrStr(Name, L"+") != NULL ||\r
+ StrStr(Name, L"=") != NULL ||\r
+ StrStr(Name, L"[") != NULL ||\r
+ StrStr(Name, L"]") != NULL ||\r
+ StrStr(Name, L"|") != NULL ||\r
+ StrStr(Name, L":") != NULL ||\r
+ StrStr(Name, L";") != NULL ||\r
+ StrStr(Name, L"\"") != NULL ||\r
+ StrStr(Name, L"<") != NULL ||\r
+ StrStr(Name, L">") != NULL ||\r
+ StrStr(Name, L"?") != NULL ||\r
+ StrStr(Name, L"/") != NULL ||\r
+ StrStr(Name, L" ") != NULL )\r
+ ){\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellLevel2HiiHandle, L"vol", Name); \r
+ return (SHELL_INVALID_PARAMETER);\r
+ }\r
+\r
Status = gEfiShellProtocol->OpenFileByName(\r
Path,\r
&ShellFileHandle,\r
Name != NULL?EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE:EFI_FILE_MODE_READ);\r
\r
if (EFI_ERROR(Status) || ShellFileHandle == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel2HiiHandle, Path);\r
- ShellStatus = SHELL_ACCESS_DENIED;\r
- return (ShellStatus);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel2HiiHandle, L"vol", Path); \r
+ return (SHELL_ACCESS_DENIED);\r
}\r
\r
//\r
SysInfo);\r
}\r
\r
+ ASSERT(SysInfo != NULL);\r
+\r
if (Delete) {\r
- StrCpy ((CHAR16 *) SysInfo->VolumeLabel, L"");\r
+ *((CHAR16 *) SysInfo->VolumeLabel) = CHAR_NULL;\r
SysInfo->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize(SysInfo->VolumeLabel);\r
Status = EfiFpHandle->SetInfo(\r
EfiFpHandle,\r
Size2 = StrSize(SysInfo->VolumeLabel);\r
if (Size1 > Size2) {\r
SysInfo = ReallocatePool((UINTN)SysInfo->Size, (UINTN)SysInfo->Size + Size1 - Size2, SysInfo);\r
+ if (SysInfo == NULL) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellLevel2HiiHandle, L"vol"); \r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ } \r
+ }\r
+ if (SysInfo != NULL) {\r
+ StrCpyS ( (CHAR16 *) SysInfo->VolumeLabel, \r
+ (Size1>Size2? Size1/sizeof(CHAR16) : Size2/sizeof(CHAR16)), \r
+ Name\r
+ );\r
+ SysInfo->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + Size1;\r
+ Status = EfiFpHandle->SetInfo(\r
+ EfiFpHandle,\r
+ &gEfiFileSystemInfoGuid,\r
+ (UINTN)SysInfo->Size,\r
+ SysInfo);\r
}\r
- StrCpy ((CHAR16 *) SysInfo->VolumeLabel, Name);\r
- SysInfo->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + Size1;\r
- Status = EfiFpHandle->SetInfo(\r
- EfiFpHandle,\r
- &gEfiFileSystemInfoGuid,\r
- (UINTN)SysInfo->Size,\r
- SysInfo);\r
} \r
\r
FreePool(SysInfo);\r
\r
if (Delete || Name != NULL) {\r
if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_AD), gShellLevel2HiiHandle, Path);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_AD), gShellLevel2HiiHandle, L"vol", Path); \r
ShellStatus = SHELL_ACCESS_DENIED;\r
}\r
}\r
\r
- SysInfo = AllocateZeroPool(SysInfoSize);\r
+ SysInfoSize = 0;\r
+ SysInfo = NULL;\r
+\r
Status = EfiFpHandle->GetInfo(\r
EfiFpHandle,\r
&gEfiFileSystemInfoGuid,\r
&SysInfoSize,\r
SysInfo);\r
\r
+ if (Status == EFI_BUFFER_TOO_SMALL) {\r
+ SysInfo = AllocateZeroPool(SysInfoSize);\r
+ Status = EfiFpHandle->GetInfo(\r
+ EfiFpHandle,\r
+ &gEfiFileSystemInfoGuid,\r
+ &SysInfoSize,\r
+ SysInfo);\r
+ }\r
+\r
gEfiShellProtocol->CloseFile(ShellFileHandle);\r
+ \r
+ ASSERT(SysInfo != NULL);\r
\r
- //\r
- // print VolumeInfo table\r
- //\r
- ShellPrintHiiEx (\r
- 0,\r
- gST->ConOut->Mode->CursorRow,\r
- NULL,\r
- STRING_TOKEN (STR_VOL_VOLINFO),\r
- gShellLevel2HiiHandle,\r
- SysInfo->VolumeLabel,\r
- SysInfo->ReadOnly?L"r":L"rw",\r
- SysInfo->VolumeSize,\r
- SysInfo->FreeSpace,\r
- SysInfo->BlockSize\r
- );\r
- SHELL_FREE_NON_NULL(SysInfo);\r
+ if (SysInfo != NULL) {\r
+ //\r
+ // print VolumeInfo table\r
+ //\r
+ ShellPrintHiiEx (\r
+ 0,\r
+ gST->ConOut->Mode->CursorRow,\r
+ NULL,\r
+ STRING_TOKEN (STR_VOL_VOLINFO),\r
+ gShellLevel2HiiHandle,\r
+ SysInfo->VolumeLabel,\r
+ SysInfo->ReadOnly?L"r":L"rw",\r
+ SysInfo->VolumeSize,\r
+ SysInfo->FreeSpace,\r
+ SysInfo->BlockSize\r
+ );\r
+ SHELL_FREE_NON_NULL(SysInfo);\r
+ }\r
\r
return (ShellStatus);\r
}\r
CONST CHAR16 *CurDir;\r
BOOLEAN DeleteMode;\r
CHAR16 *FullPath;\r
+ CHAR16 *TempSpot;\r
UINTN Length;\r
+ CONST CHAR16 *NewName;\r
\r
Length = 0;\r
ProblemParam = NULL;\r
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
if (EFI_ERROR(Status)) {\r
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, ProblemParam);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel2HiiHandle, L"vol", ProblemParam); \r
FreePool(ProblemParam);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
}\r
\r
if (ShellCommandLineGetCount(Package) > 2) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellLevel2HiiHandle, L"vol"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
PathName = ShellCommandLineGetRawValue(Package, 1);\r
CurDir = gEfiShellProtocol->GetCurDir(NULL);\r
if (CurDir == NULL) {\r
ShellStatus = SHELL_NOT_FOUND;\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), gShellLevel2HiiHandle, L"vol"); \r
} else {\r
PathName = CurDir;\r
}\r
}\r
if (PathName != NULL) {\r
- StrnCatGrow(&FullPath, &Length, PathName, StrStr(PathName, L"\\")==NULL?0:StrStr(PathName, L"\\")-PathName+1);\r
- if (StrStr(FullPath, L":\\") == NULL) {\r
- StrnCatGrow(&FullPath, &Length, L":\\", 0);\r
+ TempSpot = StrStr(PathName, L":");\r
+ if (TempSpot != NULL) {\r
+ *TempSpot = CHAR_NULL;\r
+ }\r
+ TempSpot = StrStr(PathName, L"\\");\r
+ if (TempSpot != NULL) {\r
+ *TempSpot = CHAR_NULL;\r
}\r
+ StrnCatGrow(&FullPath, &Length, PathName, 0);\r
+ StrnCatGrow(&FullPath, &Length, L":\\", 0);\r
DeleteMode = ShellCommandLineGetFlag(Package, L"-d");\r
+ NewName = ShellCommandLineGetValue(Package, L"-n");\r
if (DeleteMode && ShellCommandLineGetFlag(Package, L"-n")) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CON), gShellLevel2HiiHandle);\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellLevel2HiiHandle, L"vol", L"-d", L"-n"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetFlag(Package, L"-n") && ShellCommandLineGetValue(Package, L"-n") == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellLevel2HiiHandle, L"-n");\r
+ } else if (ShellCommandLineGetFlag(Package, L"-n") && NewName == NULL) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellLevel2HiiHandle, L"vol", L"-n"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetValue(Package, L"-n") != NULL && StrLen(ShellCommandLineGetValue(Package, L"-n")) > 11) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellLevel2HiiHandle, L"-n");\r
+ } else if (NewName != NULL && StrLen(NewName) > 11) {\r
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellLevel2HiiHandle, L"vol", NewName, L"-n"); \r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else if (ShellStatus == SHELL_SUCCESS) {\r
ShellStatus = HandleVol(\r
FullPath,\r
DeleteMode,\r
- ShellCommandLineGetValue(Package, L"-n")\r
+ NewName\r
);\r
}\r
}\r