Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1999 Intel Corporation
Module Name:
goto.c Abstract:
Shell Environment batch goto command
Revision History
--*/
#include "shelle.h"
/*
* Statics */ STATIC CHAR16 *TargetLabel;
/*/////////////////////////////////////////////////////////////////////
Function Name: SEnvCmdGoto
Description: Transfers execution of batch file to location following a label (:labelname). */ EFI_STATUS SEnvCmdGoto( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { CHAR16 **Argv; UINTN Argc = 0; EFI_STATUS Status = EFI_SUCCESS;
InitializeShellApplication (ImageHandle, SystemTable); Argv = SI->Argv; Argc = SI->Argc;
if ( !SEnvBatchIsActive() ) { Print( L"Error: GOTO command only supported in script files\n" ); Status = EFI_UNSUPPORTED; goto Done; }
if ( Argc > 2 ) { Status = EFI_INVALID_PARAMETER; goto Done; }
TargetLabel = StrDuplicate( Argv[1] ); if ( !TargetLabel ) { Status = EFI_OUT_OF_RESOURCES; goto Done; }
SEnvBatchSetGotoActive(); Done: return Status; }
/*/////////////////////////////////////////////////////////////////////
Function Name: SEnvCheckForGotoTarget
Description: Check to see if we have found the target label of a GOTO command. */ EFI_STATUS SEnvCheckForGotoTarget( IN CHAR16 *Candidate, IN UINT64 GotoFilePos, IN UINT64 FilePosition, OUT UINTN *GotoTargetStatus ) { EFI_STATUS Status = EFI_SUCCESS;
if ( !Candidate ) { Status = EFI_INVALID_PARAMETER; goto Done; }
/*
* See if we found the label (strip the leading ':' off the candidate) * or if we have searched the whole file without finding it. */ if ( StriCmp( &Candidate[1], TargetLabel ) == 0 ) { *GotoTargetStatus = GOTO_TARGET_FOUND; goto Done;
} else if ( GotoFilePos == FilePosition ) {
*GotoTargetStatus = GOTO_TARGET_DOESNT_EXIST; goto Done;
} else {
*GotoTargetStatus = GOTO_TARGET_NOT_FOUND; goto Done; }
Done: return Status; }
/*/////////////////////////////////////////////////////////////////////
Function Name: SEnvPrintLabelNotFound
Description: Print an error message when a label referenced by a GOTO is not found in the script file.. */ VOID SEnvPrintLabelNotFound( VOID ) { Print( L"GOTO target label \":%s\" not found\n", TargetLabel ); return; }
/*/////////////////////////////////////////////////////////////////////
Function Name: SEnvInitTargetLabel
Description: Initialize the target label for the GOTO command. */ VOID SEnvInitTargetLabel( VOID ) { TargetLabel = NULL; return; } /*/////////////////////////////////////////////////////////////////////
Function Name: SEnvFreeTargetLabel
Description: Free the target label saved from the GOTO command. */ VOID SEnvFreeTargetLabel( VOID ) { if ( TargetLabel ) { FreePool( TargetLabel ); TargetLabel = NULL; } return; }
|