- StatusCode,\r
- &ExitDataSize,\r
- &ExitData);\r
-\r
- if (Status == EFI_ABORTED) {\r
- // If the command exited with an error, the shell should put the exit\r
- // status in ExitData, preceded by a null-terminated string.\r
- ASSERT (ExitDataSize == StrSize (ExitData) + sizeof (SHELL_STATUS));\r
-\r
- if (StatusCode != NULL) {\r
- // Skip the null-terminated string\r
- ExitData += StrLen (ExitData) + 1;\r
-\r
- // Use CopyMem to avoid alignment faults\r
- CopyMem (StatusCode, ExitData, sizeof (SHELL_STATUS));\r
-\r
- // Convert from SHELL_STATUS to EFI_STATUS\r
- // EFI_STATUSes have top bit set when they are errors.\r
- // (See UEFI Spec Appendix D)\r
- if (*StatusCode != SHELL_SUCCESS) {\r
- *StatusCode = (EFI_STATUS) *StatusCode | MAX_BIT;\r
- }\r
- }\r
- FreePool (ExitData);\r
- Status = EFI_SUCCESS;\r
- }\r