PXEBC_PRIVATE_DATA *Private;\r
EFI_PXE_BASE_CODE_MODE *Mode;\r
EFI_PXE_BASE_CODE_DISCOVER_INFO DefaultInfo;\r
+ EFI_PXE_BASE_CODE_DISCOVER_INFO *CreatedInfo;\r
EFI_PXE_BASE_CODE_SRVLIST *SrvList;\r
EFI_PXE_BASE_CODE_SRVLIST DefaultSrvList;\r
PXEBC_CACHED_DHCP4_PACKET *Packet;\r
Mode = Private->PxeBc.Mode;\r
BootSvrEntry = NULL;\r
SrvList = NULL;\r
+ CreatedInfo = NULL;\r
Status = EFI_DEVICE_ERROR;\r
Private->Function = EFI_PXE_BASE_CODE_FUNCTION_DISCOVER;\r
\r
}\r
\r
DefaultInfo.IpCnt = 0;\r
+ Info = &DefaultInfo;\r
+ SrvList = Info->SrvList;\r
\r
if (DefaultInfo.MustUseList) {\r
BootSvrEntry = VendorOpt->BootSvr;\r
}\r
\r
DefaultInfo.IpCnt = BootSvrEntry->IpCnt;\r
+\r
+ if (DefaultInfo.IpCnt >= 1) {\r
+ CreatedInfo = AllocatePool (sizeof (DefaultInfo) + (DefaultInfo.IpCnt - 1) * sizeof (*SrvList));\r
+ if (CreatedInfo == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ } \r
+ \r
+ CopyMem (CreatedInfo, &DefaultInfo, sizeof (DefaultInfo));\r
+ Info = CreatedInfo;\r
+ SrvList = Info->SrvList;\r
+ }\r
+\r
+ for (Index = 0; Index < DefaultInfo.IpCnt; Index++) {\r
+ CopyMem (&SrvList[Index].IpAddr, &BootSvrEntry->IpAddr[Index], sizeof (EFI_IPv4_ADDRESS));\r
+ SrvList[Index].AcceptAnyResponse = FALSE;\r
+ SrvList[Index].Type = BootSvrEntry->Type;\r
+ }\r
}\r
\r
- Info = &DefaultInfo;\r
} else {\r
\r
SrvList = Info->SrvList;\r
TRUE,\r
&Private->PxeReply.Packet.Ack\r
);\r
+ if (!EFI_ERROR (Status)) {\r
+ break;\r
+ } \r
}\r
\r
} else if (Info->UseMCast) {\r
);\r
}\r
\r
+ if (CreatedInfo != NULL) {\r
+ FreePool (CreatedInfo);\r
+ }\r
+ \r
return Status;\r
}\r
\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- if ((BufferSize == NULL) || ((BufferPtr == NULL) && (*BufferSize != 0))) {\r
+ if ((BufferSize == NULL) || (BufferPtr == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r