Function to process a NSH script file via SHELL_FILE_HANDLE. @param[in] Handle The handle to the already opened file. @param[in] Name The name of the script file. @retval EFI_SUCCESS the script completed successfully **/
| 2840 | @retval EFI_SUCCESS the script completed successfully |
| 2841 | **/ |
| 2842 | EFI_STATUS |
| 2843 | RunScriptFileHandle ( |
| 2844 | IN SHELL_FILE_HANDLE Handle, |
| 2845 | IN CONST CHAR16 *Name |
| 2846 | ) |
| 2847 | { |
| 2848 | EFI_STATUS Status = EFI_SUCCESS; |
| 2849 | SCRIPT_FILE *NewScriptFile; |
| 2850 | UINTN LoopVar; |
| 2851 | UINTN PrintBuffSize; |
| 2852 | CHAR16 *CommandLine; |
| 2853 | CHAR16 *CommandLine2; |
| 2854 | CHAR16 *CommandLine3; |
| 2855 | SCRIPT_COMMAND_LIST *LastCommand; |
| 2856 | BOOLEAN Ascii; |
| 2857 | BOOLEAN PreScriptEchoState; |
| 2858 | BOOLEAN PreCommandEchoState; |
| 2859 | CONST CHAR16 *CurDir; |
| 2860 | UINTN LineCount; |
| 2861 | CHAR16 LeString[50]; |
| 2862 | LIST_ENTRY OldBufferList; |
| 2863 | |
| 2864 | if (!ShellCommandGetScriptExit()) { |
| 2865 | return (EFI_OUT_OF_RESOURCES); |
| 2866 | } |
| 2867 | |
| 2868 | PreScriptEchoState = ShellCommandGetEchoState(); |
| 2869 | PrintBuffSize = PcdGet16(PcdShellPrintBufferSize); |
| 2870 | |
| 2871 | NewScriptFile = (SCRIPT_FILE*)AllocateZeroPool(sizeof(SCRIPT_FILE)); |
| 2872 | if (NewScriptFile == NULL) { |
| 2873 | return (EFI_OUT_OF_RESOURCES); |
| 2874 | } |
| 2875 | |
| 2876 | // |
| 2877 | // Set up the name |
| 2878 | // |
| 2879 | // ASSERT(NewScriptFile->ScriptName == NULL); |
| 2880 | NewScriptFile->ScriptName = StrnCatGrow(&NewScriptFile->ScriptName, NULL, Name, 0); |
| 2881 | if (NewScriptFile->ScriptName == NULL) { |
| 2882 | DeleteScriptFileStruct(NewScriptFile); |
| 2883 | return (EFI_OUT_OF_RESOURCES); |
| 2884 | } |
| 2885 | |
| 2886 | // |
| 2887 | // Save the parameters (used to replace %0 to %9 later on) |
| 2888 | // |
| 2889 | NewScriptFile->Argc = ShellInfoObject.NewShellParametersProtocol->Argc; |
| 2890 | if (NewScriptFile->Argc != 0) { |
| 2891 | NewScriptFile->Argv = (CHAR16**)AllocateZeroPool(NewScriptFile->Argc * sizeof(CHAR16*)); |
| 2892 | if (NewScriptFile->Argv == NULL) { |
| 2893 | DeleteScriptFileStruct(NewScriptFile); |
| 2894 | return (EFI_OUT_OF_RESOURCES); |
| 2895 | } |
| 2896 | for (LoopVar = 0 ; LoopVar < 10 && LoopVar < NewScriptFile->Argc; LoopVar++) { |
| 2897 | // ASSERT(NewScriptFile->Argv[LoopVar] == NULL); |
| 2898 | if (NewScriptFile->Argv[LoopVar]) { |
| 2899 | break; |
no test coverage detected