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_PROBLEM), gShellLevel2HiiHandle, Name);\r
+ return (SHELL_INVALID_PARAMETER);\r
+ }\r
+\r
Status = gEfiShellProtocol->OpenFileByName(\r
Path,\r
&ShellFileHandle,\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
+ 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
SysInfo->Size = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize(SysInfo->VolumeLabel);\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);\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ } \r
+ }\r
+ if (SysInfo != NULL) {\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
- 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
}\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
}\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
ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetFlag(Package, L"-n") && ShellCommandLineGetValue(Package, L"-n") == NULL) {\r
+ } else if (ShellCommandLineGetFlag(Package, L"-n") && NewName == NULL) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellLevel2HiiHandle, L"-n");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetValue(Package, L"-n") != NULL && StrLen(ShellCommandLineGetValue(Package, L"-n")) > 11) {\r
+ } else if (NewName != NULL && StrLen(NewName) > 11) {\r
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellLevel2HiiHandle, 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