You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
1.8 KiB
Bash

#!/bin/sh
#
# Copyright (C) 2017-2019 Hamish Coleman
#
# Deal with copying the FL2 file from and to the ISO image
#
DIR="$1"
case "$DIR" in
from_iso) ;;
to_iso) ;;
ls) ;;
*)
echo direction is either from_iso, to_iso or ls
exit 1
;;
esac
shift
ISO="$1"
if [ ! -e "$ISO" ]; then
echo iso file must exist
exit 1
fi
shift
if ! which mdir >/dev/null; then
echo Fatal: It looks like you have not installed the mtools package
exit 1
fi
# All the bios update iso images I have checked have had a fat16 filesystem
# embedded in a dos mbr image as the el-torito ISO payload.
# The offset value is bytes in decimal.
FAT_OFFSET=$(scripts/geteltorito -c $ISO 2>/dev/null)
if [ -z $FAT_OFFSET ]; then
FAT_OFFSET=71680
fi
# If we just want to look at the contents, do that
if [ "$DIR" = "ls" ]; then
mdir -i "$ISO"@@"$FAT_OFFSET" -/ -b
exit
fi
# The "external" filename - used in the linux filesystem
FILENAME="$1"
if [ -z "$FILENAME" ]; then
echo need linux filename
exit 1
fi
shift
# The "internal" filename pattern to match - used in the BIOS update image
INTPATTERN="$1"
if [ -z "$INTPATTERN" ]; then
echo need to specify the pattern to match the internal filenames with
exit 1
fi
MATCH=$(mdir -i "$ISO"@@"$FAT_OFFSET" -/ -b |grep "$INTPATTERN")
if [ -z "$MATCH" ]; then
echo "Error: could not find any files in $ISO matching $INTPATTERN"
exit 1
fi
if [ "$(echo "$MATCH" |wc -w)" -ne 1 ]; then
echo "Error: $ISO has more than one matching file:"
echo "$MATCH"
exit 1
fi
from_iso() {
mcopy -n -i "$ISO"@@"$FAT_OFFSET" "$MATCH" "$FILENAME"
}
to_iso() {
if [ ! -f "$FILENAME" ]; then
echo "Error: $FILENAME must exist"
exit 1
fi
mcopy -m -o -i "$ISO"@@"$FAT_OFFSET" "$FILENAME" "$MATCH"
}
$DIR