Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/ShellPkg/Library/UefiShellLevel3CommandsLib/Touch.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/UefiShellLevel3CommandsLib/Touch.c
r85718 r99404 22 22 EFI_STATUS 23 23 TouchFileByHandle ( 24 IN SHELL_FILE_HANDLE Handle24 IN SHELL_FILE_HANDLE Handle 25 25 ) 26 26 { 27 EFI_STATUS Status;28 EFI_FILE_INFO *FileInfo;29 30 FileInfo = gEfiShellProtocol->GetFileInfo (Handle);31 if ((FileInfo->Attribute & EFI_FILE_READ_ONLY) != 0) {27 EFI_STATUS Status; 28 EFI_FILE_INFO *FileInfo; 29 30 FileInfo = gEfiShellProtocol->GetFileInfo (Handle); 31 if ((FileInfo->Attribute & EFI_FILE_READ_ONLY) != 0) { 32 32 return (EFI_ACCESS_DENIED); 33 33 } 34 Status = gRT->GetTime(&FileInfo->ModificationTime, NULL); 35 if (EFI_ERROR(Status)) { 36 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, L"gRT->GetTime", Status); 34 35 Status = gRT->GetTime (&FileInfo->ModificationTime, NULL); 36 if (EFI_ERROR (Status)) { 37 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, L"gRT->GetTime", Status); 37 38 return (SHELL_DEVICE_ERROR); 38 39 } 39 40 40 CopyMem (&FileInfo->LastAccessTime, &FileInfo->ModificationTime, sizeof(EFI_TIME));41 42 Status = gEfiShellProtocol->SetFileInfo (Handle, FileInfo);43 44 FreePool (FileInfo);41 CopyMem (&FileInfo->LastAccessTime, &FileInfo->ModificationTime, sizeof (EFI_TIME)); 42 43 Status = gEfiShellProtocol->SetFileInfo (Handle, FileInfo); 44 45 FreePool (FileInfo); 45 46 46 47 return (Status); … … 66 67 ) 67 68 { 68 EFI_STATUS Status;69 EFI_SHELL_FILE_INFO *FileList;70 EFI_SHELL_FILE_INFO *Walker;71 CHAR16 *TempSpot;72 73 Status 74 FileList 75 Walker 69 EFI_STATUS Status; 70 EFI_SHELL_FILE_INFO *FileList; 71 EFI_SHELL_FILE_INFO *Walker; 72 CHAR16 *TempSpot; 73 74 Status = EFI_SUCCESS; 75 FileList = NULL; 76 Walker = NULL; 76 77 77 78 if (FS == NULL) { 78 FS = StrnCatGrow (&FS, NULL, Name, 0);79 FS = StrnCatGrow (&FS, NULL, Name, 0); 79 80 if (FS != NULL) { 80 TempSpot = StrStr (FS, L"\\");81 TempSpot = StrStr (FS, L"\\"); 81 82 if (TempSpot != NULL) { 82 83 *TempSpot = CHAR_NULL; … … 84 85 } 85 86 } 87 86 88 if (FS == NULL) { 87 89 return (EFI_INVALID_PARAMETER); … … 91 93 // do it 92 94 // 93 Status = TouchFileByHandle (Handle);94 if (EFI_ERROR (Status)) {95 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel3HiiHandle, L"touch", Name);95 Status = TouchFileByHandle (Handle); 96 if (EFI_ERROR (Status)) { 97 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel3HiiHandle, L"touch", Name); 96 98 return (Status); 97 99 } … … 100 102 // if it's a directory recurse... 101 103 // 102 if ( FileHandleIsDirectory(Handle) == EFI_SUCCESS&& Rec) {104 if ((FileHandleIsDirectory (Handle) == EFI_SUCCESS) && Rec) { 103 105 // 104 106 // get each file under this directory 105 107 // 106 if (EFI_ERROR (gEfiShellProtocol->FindFilesInDir(Handle, &FileList))) {108 if (EFI_ERROR (gEfiShellProtocol->FindFilesInDir (Handle, &FileList))) { 107 109 Status = EFI_INVALID_PARAMETER; 108 110 } … … 111 113 // recurse on each 112 114 // 113 for (Walker = (EFI_SHELL_FILE_INFO *)GetFirstNode(&FileList->Link) 114 ; FileList != NULL && !IsNull(&FileList->Link, &Walker->Link) && !EFI_ERROR(Status) 115 ; Walker = (EFI_SHELL_FILE_INFO *)GetNextNode(&FileList->Link, &Walker->Link) 116 ){ 117 if ( (StrCmp(Walker->FileName, L".") != 0) 118 && (StrCmp(Walker->FileName, L"..") != 0) 119 ){ 115 for (Walker = (EFI_SHELL_FILE_INFO *)GetFirstNode (&FileList->Link) 116 ; FileList != NULL && !IsNull (&FileList->Link, &Walker->Link) && !EFI_ERROR (Status) 117 ; Walker = (EFI_SHELL_FILE_INFO *)GetNextNode (&FileList->Link, &Walker->Link) 118 ) 119 { 120 if ( (StrCmp (Walker->FileName, L".") != 0) 121 && (StrCmp (Walker->FileName, L"..") != 0) 122 ) 123 { 120 124 // 121 125 // Open the file since we need that handle. 122 126 // 123 127 Status = gEfiShellProtocol->OpenFileByName (Walker->FullName, &Walker->Handle, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE); 124 if (EFI_ERROR (Status)) {125 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel3HiiHandle, L"touch", Walker->FullName);128 if (EFI_ERROR (Status)) { 129 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel3HiiHandle, L"touch", Walker->FullName); 126 130 Status = EFI_ACCESS_DENIED; 127 131 } else { 128 Status = DoTouchByHandle (Walker->FullName, FS, Walker->Handle, TRUE);129 gEfiShellProtocol->CloseFile (Walker->Handle);132 Status = DoTouchByHandle (Walker->FullName, FS, Walker->Handle, TRUE); 133 gEfiShellProtocol->CloseFile (Walker->Handle); 130 134 Walker->Handle = NULL; 131 135 } … … 136 140 // free stuff 137 141 // 138 if ( FileList != NULL && EFI_ERROR(gEfiShellProtocol->FreeFileList(&FileList))) {142 if ((FileList != NULL) && EFI_ERROR (gEfiShellProtocol->FreeFileList (&FileList))) { 139 143 Status = EFI_INVALID_PARAMETER; 140 144 } … … 144 148 } 145 149 146 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {147 { L"-r", TypeFlag},148 { NULL, TypeMax}149 150 STATIC CONST SHELL_PARAM_ITEM ParamList[] = { 151 { L"-r", TypeFlag }, 152 { NULL, TypeMax } 153 }; 150 154 151 155 /** … … 162 166 ) 163 167 { 164 EFI_STATUS Status;165 LIST_ENTRY *Package;166 CHAR16 *ProblemParam;167 CONST CHAR16 *Param;168 SHELL_STATUS ShellStatus;169 UINTN ParamCount;170 EFI_SHELL_FILE_INFO *FileList;171 EFI_SHELL_FILE_INFO *Node;172 173 ProblemParam 174 ShellStatus 175 ParamCount 176 FileList 168 EFI_STATUS Status; 169 LIST_ENTRY *Package; 170 CHAR16 *ProblemParam; 171 CONST CHAR16 *Param; 172 SHELL_STATUS ShellStatus; 173 UINTN ParamCount; 174 EFI_SHELL_FILE_INFO *FileList; 175 EFI_SHELL_FILE_INFO *Node; 176 177 ProblemParam = NULL; 178 ShellStatus = SHELL_SUCCESS; 179 ParamCount = 0; 180 FileList = NULL; 177 181 178 182 // 179 183 // initialize the shell lib (we must be in non-auto-init...) 180 184 // 181 Status = ShellInitialize ();182 ASSERT_EFI_ERROR (Status);183 184 Status = CommandInit ();185 ASSERT_EFI_ERROR (Status);185 Status = ShellInitialize (); 186 ASSERT_EFI_ERROR (Status); 187 188 Status = CommandInit (); 189 ASSERT_EFI_ERROR (Status); 186 190 187 191 // … … 189 193 // 190 194 Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE); 191 if (EFI_ERROR (Status)) {192 if ( Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {193 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, L"touch", ProblemParam);194 FreePool (ProblemParam);195 if (EFI_ERROR (Status)) { 196 if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) { 197 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellLevel3HiiHandle, L"touch", ProblemParam); 198 FreePool (ProblemParam); 195 199 ShellStatus = SHELL_INVALID_PARAMETER; 196 200 } else { 197 ASSERT (FALSE);201 ASSERT (FALSE); 198 202 } 199 203 } else { … … 201 205 // check for "-?" 202 206 // 203 if (ShellCommandLineGetFlag(Package, L"-?")) { 204 ASSERT(FALSE); 205 } 206 if (ShellCommandLineGetRawValue(Package, 1) == NULL) { 207 if (ShellCommandLineGetFlag (Package, L"-?")) { 208 ASSERT (FALSE); 209 } 210 211 if (ShellCommandLineGetRawValue (Package, 1) == NULL) { 207 212 // 208 213 // we insufficient parameters 209 214 // 210 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel3HiiHandle, L"touch");215 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellLevel3HiiHandle, L"touch"); 211 216 ShellStatus = SHELL_INVALID_PARAMETER; 212 217 } else { … … 215 220 // if parameter is a directory then add all the files below it to the list 216 221 // 217 for ( ParamCount = 1, Param = ShellCommandLineGetRawValue(Package, ParamCount) 218 ; Param != NULL 219 ; ParamCount++, Param = ShellCommandLineGetRawValue(Package, ParamCount) 220 ){ 221 Status = ShellOpenFileMetaArg((CHAR16*)Param, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, &FileList); 222 if (EFI_ERROR(Status)) { 223 ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"touch", (CHAR16*)Param); 222 for ( ParamCount = 1, Param = ShellCommandLineGetRawValue (Package, ParamCount) 223 ; Param != NULL 224 ; ParamCount++, Param = ShellCommandLineGetRawValue (Package, ParamCount) 225 ) 226 { 227 Status = ShellOpenFileMetaArg ((CHAR16 *)Param, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, &FileList); 228 if (EFI_ERROR (Status)) { 229 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellLevel3HiiHandle, L"touch", (CHAR16 *)Param); 224 230 ShellStatus = SHELL_NOT_FOUND; 225 231 break; 226 232 } 233 227 234 // 228 235 // make sure we completed the param parsing sucessfully... … … 233 240 // check that we have at least 1 file 234 241 // 235 if ( FileList == NULL || IsListEmpty(&FileList->Link)) {236 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_NF), gShellLevel3HiiHandle, L"touch", Param);242 if ((FileList == NULL) || IsListEmpty (&FileList->Link)) { 243 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_NF), gShellLevel3HiiHandle, L"touch", Param); 237 244 continue; 238 245 } else { … … 240 247 // loop through the list and make sure we are not aborting... 241 248 // 242 for ( Node = (EFI_SHELL_FILE_INFO*)GetFirstNode(&FileList->Link) 243 ; !IsNull(&FileList->Link, &Node->Link) && !ShellGetExecutionBreakFlag() 244 ; Node = (EFI_SHELL_FILE_INFO*)GetNextNode(&FileList->Link, &Node->Link) 245 ){ 249 for ( Node = (EFI_SHELL_FILE_INFO *)GetFirstNode (&FileList->Link) 250 ; !IsNull (&FileList->Link, &Node->Link) && !ShellGetExecutionBreakFlag () 251 ; Node = (EFI_SHELL_FILE_INFO *)GetNextNode (&FileList->Link, &Node->Link) 252 ) 253 { 246 254 // 247 255 // make sure the file opened ok 248 256 // 249 if (EFI_ERROR (Node->Status)){250 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel3HiiHandle, L"touch", Node->FileName);257 if (EFI_ERROR (Node->Status)) { 258 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel3HiiHandle, L"touch", Node->FileName); 251 259 ShellStatus = SHELL_NOT_FOUND; 252 260 continue; 253 261 } 254 262 255 Status = DoTouchByHandle (Node->FullName, NULL, Node->Handle, ShellCommandLineGetFlag(Package, L"-r"));256 if (EFI_ERROR (Status) && Status != EFI_ACCESS_DENIED) {257 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel3HiiHandle, L"touch", Node->FileName);263 Status = DoTouchByHandle (Node->FullName, NULL, Node->Handle, ShellCommandLineGetFlag (Package, L"-r")); 264 if (EFI_ERROR (Status) && (Status != EFI_ACCESS_DENIED)) { 265 ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellLevel3HiiHandle, L"touch", Node->FileName); 258 266 ShellStatus = SHELL_NOT_FOUND; 259 267 } … … 261 269 } 262 270 } 271 263 272 // 264 273 // Free the fileList 265 274 // 266 if (FileList != NULL && !IsListEmpty(&FileList->Link)) { 267 Status = ShellCloseFileMetaArg(&FileList); 268 ASSERT_EFI_ERROR(Status); 269 } 275 if ((FileList != NULL) && !IsListEmpty (&FileList->Link)) { 276 Status = ShellCloseFileMetaArg (&FileList); 277 ASSERT_EFI_ERROR (Status); 278 } 279 270 280 FileList = NULL; 271 281 } … … 278 288 } 279 289 280 if (ShellGetExecutionBreakFlag ()) {290 if (ShellGetExecutionBreakFlag ()) { 281 291 return (SHELL_ABORTED); 282 292 } … … 284 294 return (ShellStatus); 285 295 } 286
Note:
See TracChangeset
for help on using the changeset viewer.