Andrey Drobyshev
2022-Dec-21 16:38 UTC
[Libguestfs] [V2V PATCH v2 1/2] inspect: use List.fold_left to iterate over partitions
This patch is merely a refactoring and does not introduce any changes in behaviour. It's used as a prelude for the next patch which prioritizes BIOS boot partition when searching for the right firmware. Co-authored-by: Laszlo Ersek <lersek at redhat.com> Signed-off-by: Andrey Drobyshev <andrey.drobyshev at virtuozzo.com> --- convert/inspect_source.ml | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/convert/inspect_source.ml b/convert/inspect_source.ml index 056d0bca..42a26f68 100644 --- a/convert/inspect_source.ml +++ b/convert/inspect_source.ml @@ -225,26 +225,30 @@ and list_applications g root = function * Otherwise, [BIOS] is returned. *) and get_firmware_bootable_device g - let rec uefi_ESP_guid = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" - and is_uefi_ESP dev part - let partnum = g#part_to_partnum part in - g#part_get_gpt_type dev partnum = uefi_ESP_guid - and parttype_is_gpt dev + let parttype_is_gpt dev try g#part_get_parttype dev = "gpt" with G.Error msg as exn -> (* If it's _not_ "unrecognised disk label" then re-raise it. *) if g#last_errno () <> G.Errno.errno_EINVAL then raise exn; debug "%s (ignored)" msg; false - and is_uefi_bootable_part part + in + let accumulate_partition esp_parts part let dev = g#part_to_dev part in - parttype_is_gpt dev && is_uefi_ESP dev part + if parttype_is_gpt dev then + let partnum = g#part_to_partnum part in + let part_type_guid = g#part_get_gpt_type dev partnum in + match part_type_guid with + (* EFI system partition *) + | "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" -> part :: esp_parts + | _ -> esp_parts + else esp_parts in - let partitions = Array.to_list (g#list_partitions ()) in - let partitions = List.filter is_uefi_bootable_part partitions in + let esp_partitions + Array.fold_left accumulate_partition [] (g#list_partitions ()) in - match partitions with + match esp_partitions with | [] -> I_BIOS | partitions -> I_UEFI partitions -- 2.31.1
Laszlo Ersek
2022-Dec-22 07:00 UTC
[Libguestfs] [V2V PATCH v2 1/2] inspect: use List.fold_left to iterate over partitions
On 12/21/22 17:38, Andrey Drobyshev wrote:> This patch is merely a refactoring and does not introduce any changes in > behaviour. It's used as a prelude for the next patch which prioritizes > BIOS boot partition when searching for the right firmware. > > Co-authored-by: Laszlo Ersek <lersek at redhat.com> > Signed-off-by: Andrey Drobyshev <andrey.drobyshev at virtuozzo.com> > --- > convert/inspect_source.ml | 24 ++++++++++++++---------- > 1 file changed, 14 insertions(+), 10 deletions(-) > > diff --git a/convert/inspect_source.ml b/convert/inspect_source.ml > index 056d0bca..42a26f68 100644 > --- a/convert/inspect_source.ml > +++ b/convert/inspect_source.ml > @@ -225,26 +225,30 @@ and list_applications g root = function > * Otherwise, [BIOS] is returned. > *) > and get_firmware_bootable_device g > - let rec uefi_ESP_guid = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" > - and is_uefi_ESP dev part > - let partnum = g#part_to_partnum part in > - g#part_get_gpt_type dev partnum = uefi_ESP_guid > - and parttype_is_gpt dev > + let parttype_is_gpt dev > try g#part_get_parttype dev = "gpt" > with G.Error msg as exn -> > (* If it's _not_ "unrecognised disk label" then re-raise it. *) > if g#last_errno () <> G.Errno.errno_EINVAL then raise exn; > debug "%s (ignored)" msg; > false > - and is_uefi_bootable_part part > + in > + let accumulate_partition esp_parts part > let dev = g#part_to_dev part in > - parttype_is_gpt dev && is_uefi_ESP dev part > + if parttype_is_gpt dev then > + let partnum = g#part_to_partnum part in > + let part_type_guid = g#part_get_gpt_type dev partnum in > + match part_type_guid with > + (* EFI system partition *) > + | "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" -> part :: esp_parts > + | _ -> esp_parts > + else esp_parts > in > > - let partitions = Array.to_list (g#list_partitions ()) in > - let partitions = List.filter is_uefi_bootable_part partitions in > + let esp_partitions > + Array.fold_left accumulate_partition [] (g#list_partitions ()) in > > - match partitions with > + match esp_partitions with > | [] -> I_BIOS > | partitions -> I_UEFI partitions >I've replaced "List.fold_left" with "Array.fold_left" in the commit message (subject line). Merged as commit d04b9a05b2a5. Laszlo