Reactos

[SETUPLIB][USETUP] Reduce duplicated code

- ScrollDownPartitionList() and ScrollUpPartitionList()
--> ScrollUpDownPartitionList()

- GetPrimaryPartitionCount() and GetLogicalPartitionCount()
--> generic GetPartitionCount() and macros.

- GetPrevUnpartitionedEntry() and GetNextUnpartitionedEntry()
--> GetAdjUnpartitionedEntry() ("Adj" == Adjacent)

+69 -118
+3 -3
base/setup/lib/utils/arcname.c
··· 702 702 BOOLEAN UseSignature; 703 703 SIZE_T NameLength; 704 704 705 - PDISKENTRY DiskEntry; 706 - PPARTENTRY PartEntry = NULL; 707 - 708 705 if (NtName->MaximumLength < sizeof(UNICODE_NULL)) 709 706 return STATUS_BUFFER_TOO_SMALL; 710 707 ··· 757 754 else 758 755 if (PeripheralType == RDiskPeripheral) 759 756 { 757 + PDISKENTRY DiskEntry; 758 + PPARTENTRY PartEntry = NULL; 759 + 760 760 if (UseSignature) 761 761 { 762 762 /* The disk signature is stored in AdapterKey */
+47 -87
base/setup/lib/utils/partlist.c
··· 2432 2432 // PartitionInfo->PartitionType == PartEntry->PartitionType 2433 2433 } 2434 2434 2435 + 2436 + /** 2437 + * @brief 2438 + * Counts the number of partitioned disk regions in a given partition list. 2439 + **/ 2435 2440 static 2436 2441 ULONG 2437 - GetPrimaryPartitionCount( 2438 - IN PDISKENTRY DiskEntry) 2442 + GetPartitionCount( 2443 + _In_ PLIST_ENTRY PartListHead) 2439 2444 { 2440 2445 PLIST_ENTRY Entry; 2441 2446 PPARTENTRY PartEntry; 2442 2447 ULONG Count = 0; 2443 2448 2444 - if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT) 2445 - { 2446 - DPRINT("GPT-partitioned disk detected, not currently supported by SETUP!\n"); 2447 - return 0; 2448 - } 2449 - 2450 - for (Entry = DiskEntry->PrimaryPartListHead.Flink; 2451 - Entry != &DiskEntry->PrimaryPartListHead; 2449 + for (Entry = PartListHead->Flink; 2450 + Entry != PartListHead; 2452 2451 Entry = Entry->Flink) 2453 2452 { 2454 2453 PartEntry = CONTAINING_RECORD(Entry, PARTENTRY, ListEntry); 2455 2454 if (PartEntry->IsPartitioned) 2456 - Count++; 2455 + ++Count; 2457 2456 } 2458 2457 2459 2458 return Count; 2460 2459 } 2461 2460 2462 - static 2463 - ULONG 2464 - GetLogicalPartitionCount( 2465 - IN PDISKENTRY DiskEntry) 2466 - { 2467 - PLIST_ENTRY ListEntry; 2468 - PPARTENTRY PartEntry; 2469 - ULONG Count = 0; 2461 + #define GetPrimaryPartitionCount(DiskEntry) \ 2462 + GetPartitionCount(&(DiskEntry)->PrimaryPartListHead) 2470 2463 2471 - if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT) 2472 - { 2473 - DPRINT("GPT-partitioned disk detected, not currently supported by SETUP!\n"); 2474 - return 0; 2475 - } 2464 + #define GetLogicalPartitionCount(DiskEntry) \ 2465 + (((DiskEntry)->DiskStyle == PARTITION_STYLE_MBR) \ 2466 + ? GetPartitionCount(&(DiskEntry)->LogicalPartListHead) : 0) 2476 2467 2477 - for (ListEntry = DiskEntry->LogicalPartListHead.Flink; 2478 - ListEntry != &DiskEntry->LogicalPartListHead; 2479 - ListEntry = ListEntry->Flink) 2480 - { 2481 - PartEntry = CONTAINING_RECORD(ListEntry, PARTENTRY, ListEntry); 2482 - if (PartEntry->IsPartitioned) 2483 - Count++; 2484 - } 2485 - 2486 - return Count; 2487 - } 2488 2468 2489 2469 static 2490 2470 BOOLEAN ··· 2727 2707 #endif 2728 2708 } 2729 2709 2710 + /** 2711 + * @brief 2712 + * Retrieves, if any, the unpartitioned disk region that is adjacent 2713 + * (next or previous) to the specified partition. 2714 + * 2715 + * @param[in] PartEntry 2716 + * Partition from where to find the adjacent unpartitioned region. 2717 + * 2718 + * @param[in] Direction 2719 + * TRUE or FALSE to search the next or previous region, respectively. 2720 + * 2721 + * @return The adjacent unpartitioned region, if it exists, or NULL. 2722 + **/ 2730 2723 static 2731 2724 PPARTENTRY 2732 - GetPrevUnpartitionedEntry( 2733 - IN PPARTENTRY PartEntry) 2725 + GetAdjUnpartitionedEntry( 2726 + _In_ PPARTENTRY PartEntry, 2727 + _In_ BOOLEAN Direction) 2734 2728 { 2735 2729 PDISKENTRY DiskEntry = PartEntry->DiskEntry; 2736 - PPARTENTRY PrevPartEntry; 2737 - PLIST_ENTRY ListHead; 2730 + PLIST_ENTRY ListHead, AdjEntry; 2738 2731 2739 - if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT) 2732 + /* In case of MBR disks only, check the logical partitions if necessary */ 2733 + if ((DiskEntry->DiskStyle == PARTITION_STYLE_MBR) && 2734 + PartEntry->LogicalPartition) 2740 2735 { 2741 - DPRINT("GPT-partitioned disk detected, not currently supported by SETUP!\n"); 2742 - return NULL; 2743 - } 2744 - 2745 - if (PartEntry->LogicalPartition) 2746 2736 ListHead = &DiskEntry->LogicalPartListHead; 2737 + } 2747 2738 else 2748 - ListHead = &DiskEntry->PrimaryPartListHead; 2749 - 2750 - if (PartEntry->ListEntry.Blink != ListHead) 2751 2739 { 2752 - PrevPartEntry = CONTAINING_RECORD(PartEntry->ListEntry.Blink, 2753 - PARTENTRY, 2754 - ListEntry); 2755 - if (!PrevPartEntry->IsPartitioned) 2756 - { 2757 - ASSERT(PrevPartEntry->PartitionType == PARTITION_ENTRY_UNUSED); 2758 - return PrevPartEntry; 2759 - } 2740 + ListHead = &DiskEntry->PrimaryPartListHead; 2760 2741 } 2761 2742 2762 - return NULL; 2763 - } 2764 - 2765 - static 2766 - PPARTENTRY 2767 - GetNextUnpartitionedEntry( 2768 - IN PPARTENTRY PartEntry) 2769 - { 2770 - PDISKENTRY DiskEntry = PartEntry->DiskEntry; 2771 - PPARTENTRY NextPartEntry; 2772 - PLIST_ENTRY ListHead; 2773 - 2774 - if (DiskEntry->DiskStyle == PARTITION_STYLE_GPT) 2775 - { 2776 - DPRINT("GPT-partitioned disk detected, not currently supported by SETUP!\n"); 2777 - return NULL; 2778 - } 2779 - 2780 - if (PartEntry->LogicalPartition) 2781 - ListHead = &DiskEntry->LogicalPartListHead; 2743 + if (Direction) 2744 + AdjEntry = PartEntry->ListEntry.Flink; // Next region. 2782 2745 else 2783 - ListHead = &DiskEntry->PrimaryPartListHead; 2746 + AdjEntry = PartEntry->ListEntry.Blink; // Previous region. 2784 2747 2785 - if (PartEntry->ListEntry.Flink != ListHead) 2748 + if (AdjEntry != ListHead) 2786 2749 { 2787 - NextPartEntry = CONTAINING_RECORD(PartEntry->ListEntry.Flink, 2788 - PARTENTRY, 2789 - ListEntry); 2790 - if (!NextPartEntry->IsPartitioned) 2750 + PartEntry = CONTAINING_RECORD(AdjEntry, PARTENTRY, ListEntry); 2751 + if (!PartEntry->IsPartitioned) 2791 2752 { 2792 - ASSERT(NextPartEntry->PartitionType == PARTITION_ENTRY_UNUSED); 2793 - return NextPartEntry; 2753 + ASSERT(PartEntry->PartitionType == PARTITION_ENTRY_UNUSED); 2754 + return PartEntry; 2794 2755 } 2795 2756 } 2796 - 2797 2757 return NULL; 2798 2758 } 2799 2759 ··· 3094 3054 /* Adjust the unpartitioned disk space entries */ 3095 3055 3096 3056 /* Get pointer to previous and next unpartitioned entries */ 3097 - PrevPartEntry = GetPrevUnpartitionedEntry(PartEntry); 3098 - NextPartEntry = GetNextUnpartitionedEntry(PartEntry); 3057 + PrevPartEntry = GetAdjUnpartitionedEntry(PartEntry, FALSE); 3058 + NextPartEntry = GetAdjUnpartitionedEntry(PartEntry, TRUE); 3099 3059 3100 3060 if (PrevPartEntry != NULL && NextPartEntry != NULL) 3101 3061 {
+13 -19
base/setup/usetup/partlist.c
··· 833 833 } 834 834 } 835 835 836 - VOID 837 - ScrollDownPartitionList( 838 - IN PPARTLIST_UI ListUi) 839 - { 840 - PPARTENTRY NextPart = GetNextPartition(ListUi->List, ListUi->CurrentPartition); 841 - if (NextPart) 842 - { 843 - ListUi->CurrentPartition = NextPart; 844 - ListUi->CurrentDisk = NextPart->DiskEntry; 845 - DrawPartitionList(ListUi); 846 - } 847 - } 848 - 836 + /** 837 + * @param[in] Direction 838 + * TRUE or FALSE to scroll to the next (down) or previous (up) entry, respectively. 839 + **/ 849 840 VOID 850 - ScrollUpPartitionList( 851 - IN PPARTLIST_UI ListUi) 841 + ScrollUpDownPartitionList( 842 + _In_ PPARTLIST_UI ListUi, 843 + _In_ BOOLEAN Direction) 852 844 { 853 - PPARTENTRY PrevPart = GetPrevPartition(ListUi->List, ListUi->CurrentPartition); 854 - if (PrevPart) 845 + PPARTENTRY PartEntry = 846 + (Direction ? GetNextPartition 847 + : GetPrevPartition)(ListUi->List, ListUi->CurrentPartition); 848 + if (PartEntry) 855 849 { 856 - ListUi->CurrentPartition = PrevPart; 857 - ListUi->CurrentDisk = PrevPart->DiskEntry; 850 + ListUi->CurrentPartition = PartEntry; 851 + ListUi->CurrentDisk = PartEntry->DiskEntry; 858 852 DrawPartitionList(ListUi); 859 853 } 860 854 }
+4 -7
base/setup/usetup/partlist.h
··· 86 86 IN SHORT Bottom); 87 87 88 88 VOID 89 - ScrollDownPartitionList( 89 + DrawPartitionList( 90 90 IN PPARTLIST_UI ListUi); 91 91 92 92 VOID 93 - ScrollUpPartitionList( 94 - IN PPARTLIST_UI ListUi); 95 - 96 - VOID 97 - DrawPartitionList( 98 - IN PPARTLIST_UI ListUi); 93 + ScrollUpDownPartitionList( 94 + _In_ PPARTLIST_UI ListUi, 95 + _In_ BOOLEAN Direction); 99 96 100 97 /* EOF */
+2 -2
base/setup/usetup/usetup.c
··· 1689 1689 else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) && 1690 1690 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */ 1691 1691 { 1692 - ScrollDownPartitionList(&ListUi); 1692 + ScrollUpDownPartitionList(&ListUi, TRUE); 1693 1693 } 1694 1694 else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) && 1695 1695 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP)) /* UP */ 1696 1696 { 1697 - ScrollUpPartitionList(&ListUi); 1697 + ScrollUpDownPartitionList(&ListUi, FALSE); 1698 1698 } 1699 1699 else if (Ir->Event.KeyEvent.wVirtualKeyCode == VK_RETURN) /* ENTER */ 1700 1700 {