Blame os-probes/mounted/x86/05efi

Packit d86cd3
#!/bin/sh
Packit d86cd3
# Detects all Microsoft OSes on a collection of partitions.
Packit d86cd3
Packit d86cd3
. /usr/share/os-prober/common.sh
Packit d86cd3
Packit d86cd3
partition="$1"
Packit d86cd3
mpoint="$2"
Packit d86cd3
type="$3"
Packit d86cd3
Packit d86cd3
# This file is for UEFI platform only
Packit d86cd3
if [ ! -d /sys/firmware/efi ] || [ -f /var/lib/partman/ignore_uefi ]; then
Packit d86cd3
	debug "Not on UEFI platform"
Packit d86cd3
	exit 1
Packit d86cd3
fi
Packit d86cd3
Packit d86cd3
# Weed out stuff that doesn't apply to us
Packit d86cd3
case "$type" in
Packit d86cd3
	vfat) debug "$1 is a FAT32 partition" ;;
Packit d86cd3
	msdos) debug "$1 is a FAT16 partition" ;;
Packit d86cd3
	fat) debug "$1 is a FAT partition (mounted by GRUB)" ;;
Packit d86cd3
	*) debug "$1 is $type partition: exiting"; exit 1 ;;
Packit d86cd3
esac
Packit d86cd3
Packit d86cd3
if type udevadm > /dev/null 2>&1; then
Packit d86cd3
	udevinfo () {
Packit d86cd3
		udevadm info "$@"
Packit d86cd3
	}
Packit d86cd3
fi
Packit d86cd3
Packit d86cd3
if type udevinfo > /dev/null 2>&1; then
Packit d86cd3
	# Skip virtual devices
Packit d86cd3
	if udevinfo -q path -n $partition | grep -q /virtual/; then
Packit d86cd3
		debug "$1 is virtual device: exiting"
Packit d86cd3
		exit 1
Packit d86cd3
	fi
Packit d86cd3
Packit d86cd3
	eval "$(udevinfo -q property -n "$partition" | grep -E '^ID_PART_ENTRY_(TYPE|SCHEME)=')"
Packit d86cd3
	debug "$partition partition scheme is $ID_PART_ENTRY_SCHEME"
Packit d86cd3
	debug "$partition partition type is $ID_PART_ENTRY_TYPE"
Packit d86cd3
Packit d86cd3
	if [ -z "$ID_PART_ENTRY_TYPE" -o -z "$ID_PART_ENTRY_SCHEME" -o \
Packit d86cd3
		\( "$ID_PART_ENTRY_SCHEME" != gpt -a "$ID_PART_ENTRY_SCHEME" != msdos \) -o \
Packit d86cd3
		\( "$ID_PART_ENTRY_SCHEME" = gpt -a "$ID_PART_ENTRY_TYPE" != c12a7328-f81f-11d2-ba4b-00a0c93ec93b \) -o \
Packit d86cd3
		\( "$ID_PART_ENTRY_SCHEME" = msdos -a "$ID_PART_ENTRY_TYPE" != 0xef \) ]; then
Packit d86cd3
		debug "$partition is not a ESP partition: exiting"
Packit d86cd3
		exit 1
Packit d86cd3
	fi
Packit d86cd3
else
Packit d86cd3
	debug "udevinfo and udevadm missing - cannot check partition type"
Packit d86cd3
fi
Packit d86cd3
Packit d86cd3
efi=$(item_in_dir efi "$mpoint")
Packit d86cd3
if [ -z "$efi" ]; then
Packit d86cd3
	debug "$mpoint does not have /EFI directory: exiting"
Packit d86cd3
	exit 1
Packit d86cd3
fi
Packit d86cd3
Packit d86cd3
ret=1
Packit Service 8d4c46
for test in /usr/libexec/os-probes/mounted/efi/*; do
Packit d86cd3
	debug "running subtest $test"
Packit d86cd3
	if [ -f "$test" ] && [ -x "$test" ]; then
rpm-build 7d8e24
		# we need results of subtest in stdout
rpm-build 7d8e24
		orig_fd_res=$fd_result
rpm-build 7d8e24
		export fd_result=1
Packit d86cd3
		entry=$("$test" "$mpoint/$efi")
rpm-build 7d8e24
		export fd_result=$orig_fd_res
Packit d86cd3
		if [ -n "$entry" ]; then
Packit d86cd3
			debug "bootloader $entry found by subtest $test"
Packit d86cd3
			ret=0
Packit d86cd3
			result "${partition}@/$efi/${entry}:efi"
Packit d86cd3
		fi
Packit d86cd3
	fi
Packit d86cd3
done
Packit d86cd3
Packit d86cd3
exit $ret