mirror of https://github.com/acidanthera/audk.git
116 lines
3.6 KiB
C
116 lines
3.6 KiB
C
|
/** @file
|
||
|
The implementation to go through each entry in IpSecConfig application.
|
||
|
|
||
|
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
|
||
|
|
||
|
This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions of the BSD License
|
||
|
which accompanies this distribution. The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php.
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
**/
|
||
|
|
||
|
#include "IpSecConfig.h"
|
||
|
#include "ForEach.h"
|
||
|
|
||
|
|
||
|
/**
|
||
|
Enumerate all entries in the database to execute specified operations according to datatype.
|
||
|
|
||
|
@param[in] DataType The value of EFI_IPSEC_CONFIG_DATA_TYPE.
|
||
|
@param[in] Routine The pointer to the function of a specified operation.
|
||
|
@param[in] Context The pointer to the context of a function.
|
||
|
|
||
|
@retval EFI_SUCCESS Execute specified operation successfully.
|
||
|
**/
|
||
|
EFI_STATUS
|
||
|
ForeachPolicyEntry (
|
||
|
IN EFI_IPSEC_CONFIG_DATA_TYPE DataType,
|
||
|
IN VISIT_POLICY_ENTRY Routine,
|
||
|
IN VOID *Context
|
||
|
)
|
||
|
{
|
||
|
EFI_STATUS GetNextStatus;
|
||
|
EFI_STATUS GetDataStatus;
|
||
|
EFI_IPSEC_CONFIG_SELECTOR *Selector;
|
||
|
VOID *Data;
|
||
|
UINTN SelectorSize;
|
||
|
UINTN DataSize;
|
||
|
BOOLEAN FirstGetNext;
|
||
|
|
||
|
FirstGetNext = TRUE;
|
||
|
SelectorSize = sizeof (EFI_IPSEC_CONFIG_SELECTOR);
|
||
|
Selector = AllocateZeroPool (SelectorSize);
|
||
|
|
||
|
DataSize = 0;
|
||
|
Data = NULL;
|
||
|
|
||
|
while (TRUE) {
|
||
|
GetNextStatus = mIpSecConfig->GetNextSelector (
|
||
|
mIpSecConfig,
|
||
|
DataType,
|
||
|
&SelectorSize,
|
||
|
Selector
|
||
|
);
|
||
|
if (GetNextStatus == EFI_BUFFER_TOO_SMALL) {
|
||
|
gBS->FreePool (Selector);
|
||
|
Selector = FirstGetNext ? AllocateZeroPool (SelectorSize) : AllocatePool (SelectorSize);
|
||
|
|
||
|
GetNextStatus = mIpSecConfig->GetNextSelector (
|
||
|
mIpSecConfig,
|
||
|
DataType,
|
||
|
&SelectorSize,
|
||
|
Selector
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (EFI_ERROR (GetNextStatus)) {
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
FirstGetNext = FALSE;
|
||
|
|
||
|
GetDataStatus = mIpSecConfig->GetData (
|
||
|
mIpSecConfig,
|
||
|
DataType,
|
||
|
Selector,
|
||
|
&DataSize,
|
||
|
Data
|
||
|
);
|
||
|
if (GetDataStatus == EFI_BUFFER_TOO_SMALL) {
|
||
|
if (Data != NULL) {
|
||
|
gBS->FreePool (Data);
|
||
|
}
|
||
|
|
||
|
Data = AllocateZeroPool (DataSize);
|
||
|
GetDataStatus = mIpSecConfig->GetData (
|
||
|
mIpSecConfig,
|
||
|
DataType,
|
||
|
Selector,
|
||
|
&DataSize,
|
||
|
Data
|
||
|
);
|
||
|
}
|
||
|
|
||
|
ASSERT_EFI_ERROR (GetDataStatus);
|
||
|
|
||
|
if (EFI_ERROR (Routine (Selector, Data, Context))) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (Data != NULL) {
|
||
|
gBS->FreePool (Data);
|
||
|
}
|
||
|
|
||
|
if (Selector != NULL) {
|
||
|
gBS->FreePool (Selector);
|
||
|
}
|
||
|
|
||
|
return EFI_SUCCESS;
|
||
|
}
|
||
|
|