#!/bin/sh

# This script sets method "efi" for all fat16 partitions that have the boot
# flag set.

# Give the kernel a chance to create /proc/efi if appropriate.
modprobe efivars >/dev/null 2>&1 || true

if [ -d /proc/efi ] || [ -d /sys/firmware/efi ]; then
    > /var/lib/partman/efi
else
    ARCH="$(archdetect)"
    case $ARCH in
	i386/mac|amd64/mac)
	    # Intel Macs have an EFI partition, regardless of
	    # whether we're currently booted using BIOS
	    # compatibility or not (if we are, we won't be able to
	    # talk to EFI directly).
	    > /var/lib/partman/efi
	    ;;
	*)
	    rm -f /var/lib/partman/efi
	    exit 0
	    ;;
    esac
fi

. /lib/partman/definitions.sh

for dev in /var/lib/partman/devices/*; do
    [ -d "$dev" ] || continue
    cd $dev
    partitions=
    open_dialog PARTITIONS
    while { read_line num id size type fs path name; [ "$id" ]; }; do
	if [ "$fs" = fat16 ]; then
	    partitions="$partitions $id"
	elif [ "$fs" = fat32 ] && [ "$name" = "EFI System Partition" ]; then
	    partitions="$partitions $id"
	fi
    done
    close_dialog

    for id in $partitions; do
	efi=no
	open_dialog GET_FLAGS $id
	while { read_line flag; [ "$flag" ]; }; do
	    if [ "$flag" = boot ]; then
		efi=yes
                # can not break here
	    fi
	done
	close_dialog
	if [ "$efi" = yes ]; then
	    mkdir -p $id
	    echo efi >$id/method
	fi
    done
done

