VOID SortHandles()

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;
}