in PcBdsPkg/MsBootPolicy/MsBootPolicy.c [205:242]
VOID SortHandles(EFI_HANDLE *HandleBuffer, UINTN HandleCount) {
UINTN Index;
EFI_DEVICE_PATH_PROTOCOL *DevicePathA;
EFI_DEVICE_PATH_PROTOCOL *DevicePathB;
EFI_HANDLE *TempHandle;
BOOLEAN Swap;
UINTN SwapCount;
DEBUG((DEBUG_INFO,"%a\n",__FUNCTION__));
if (HandleCount < 2) {
return;
}
SwapCount = 0;
DEBUG((DEBUG_INFO,"SortHandles - Before sorting\n"));
DisplayDevicePaths(HandleBuffer, HandleCount);
do {
Swap = FALSE;
for (Index = 0; Index < (HandleCount - 1); Index++) {
DevicePathA = DevicePathFromHandle(HandleBuffer[Index]);
DevicePathB = DevicePathFromHandle(HandleBuffer[Index + 1]);
if (CompareDevicePathAgtB(DevicePathA, DevicePathB)) {
TempHandle = HandleBuffer[Index];
HandleBuffer[Index] = HandleBuffer[Index + 1];
HandleBuffer[Index + 1] = TempHandle;
Swap = TRUE;
}
}
if (Swap) {
SwapCount++;
}
} while ((Swap == TRUE) && (SwapCount < 50));
DEBUG((DEBUG_INFO,"SortHandles - After sorting\n"));
DisplayDevicePaths(HandleBuffer, HandleCount);
DEBUG((DEBUG_INFO,"Exit %a, SwapCount = %d\n",__FUNCTION__,SwapCount));
return;
}