wok-next diff syslinux/stuff/tools/isohybrid.sh @ rev 21727

created recipe for vbindiff
author Hans-Günter Theisgen
date Sat Nov 21 14:32:44 2020 +0100 (2020-11-21)
parents db21b68f7891
children
line diff
     1.1 --- a/syslinux/stuff/tools/isohybrid.sh	Fri Nov 03 15:07:20 2017 +0100
     1.2 +++ b/syslinux/stuff/tools/isohybrid.sh	Sat Nov 21 14:32:44 2020 +0100
     1.3 @@ -187,44 +187,48 @@
     1.4  	store32 440 $id
     1.5  	store32 508 0xAA550000
     1.6  	e=$(( ((${entry:-1} -1) % 4) *16 +446))
     1.7 -	store32 $e 0x10080
     1.8  	esect=$(( ($sectors + ((($cylinders -1) & 0x300) >>2)) <<16))
     1.9  	ecyl=$(( (($cylinders -1) & 0xff) <<24))
    1.10 -	store32 $(($e + 4)) $(($partype + (($heads - 1) <<8) +$esect +$ecyl))
    1.11 -	store32 $(($e + 8)) $offset
    1.12 -	store32 $(($e + 12)) $(($cylinders * $heads * $sectors))
    1.13 -	if [ -n "$efi_ofs" ]; then
    1.14 +	epart=$(((($heads - 1) <<8) +$esect +$ecyl))
    1.15 +	sectorcount=$(($cylinders * $heads * $sectors))
    1.16 +	lastlba=$(($sectorcount -1))
    1.17 +	if [ -z "$efi_ofs" ]; then
    1.18 +		store32 $e 0x10080
    1.19 +		store32 $(($e + 4)) $(($partype + $epart))
    1.20 +		store32 $(($e + 8)) $offset
    1.21 +		store32 $(($e + 12)) $sectorcount
    1.22 +	else
    1.23  		[ $(read16 0 1024) -eq 35615 -a $(read16 11 0) -ne 35615 ] &&
    1.24  		ddq bs=512 conv=notrunc skip=2 seek=44 count=20 if=$iso of=$iso
    1.25 -		store32 $((446+16)) $((0xFFFFFE00))
    1.26 -		store32 $((446+16+4)) $((0xFFFFFEEF))
    1.27 -		store32 $((446+16+8)) $efi_ofs
    1.28 -		store32 $((446+16+12)) $efi_len
    1.29 +		store32 $((446)) $((0x10000))
    1.30 +		store32 $((446+4)) $((0xFFFFFEEE))
    1.31 +		store32 $((446+8)) 1
    1.32 +		store32 $((446+12)) $lastlba
    1.33  		uudecode <<EOT | unlzma | ddq bs=512 seek=1 of=$iso conv=notrunc
    1.34  begin-base64 644 -
    1.35 -XQAAgAD//////////wAikYVN1N2VY3JXMnUMJn1RCdQOHN33EegtIBhrUQ7Q
    1.36 -JNaW37NYVuUAmqtISPiCdgAxPRlBS0xDlmAPPOCSZXmEFz9jEkXSzmsGn6+o
    1.37 -7SMAKMfvpMa3U1bJv/napT+/NFttJSJSx0xJA3em3KJcZsO66vaYeJC5tE+3
    1.38 -T0p9AJtSH6X8SMic3vU3hYWwHsYnsmeoGmsy4EJba9Wf/0liMQA=
    1.39 +XQAAgAD//////////wAikYVN1N2VY3JXMnUMJn1TblyFehfeJH+D4/XPYFjO
    1.40 +OzQluqM2w0L9b1dJMfZHJbnNnBFhYprW0PWPY1UOgQJkhF/W2Z0lXvaSrZ7t
    1.41 +yEtpmE3Go6qt6FetOfWNMJZhtBdE0TjxFZCvh5z8hy/kRQb1XOkLxeb5VHT3
    1.42 +H4JI5S76wY0TueXYsBOJwlwW9fZ8IXP72cDO3JArS4ZhUGxbOOF2oDuf/hFM
    1.43 +zQ==
    1.44  ====
    1.45  EOT
    1.46 -		lastlba=$((($cylinders * $heads * $sectors) -1))
    1.47 +		lastlba=$(($sectorcount -1))
    1.48  		usablelba=34
    1.49  		store32 $((0x218)) 1
    1.50  		store32 $((0x220)) $lastlba
    1.51  		store32 $((0x228)) $usablelba
    1.52  		store32 $((0x230)) $(($lastlba-$usablelba+1))
    1.53 -		store32 $((0x428)) $(($lastlba-0x800))
    1.54 -		store32 $((0x4A0)) $efi_ofs
    1.55 -		store32 $((0x4A8)) $(($efi_ofs+$efi_len-1))
    1.56 -		store32 $((0x258)) $(crc32 0x400 0x4000)
    1.57 -		store32 $((0x210)) $(crc32 0x200 $(read32 0 $((0x20C))))
    1.58 +		store32 $((0x420)) $efi_ofs
    1.59 +		store32 $((0x428)) $(($efi_ofs+$efi_len-1))
    1.60  		store32sw $((0x1008)) $(($efi_ofs/4))
    1.61  		store32sw $((0x1054)) $(($efi_len/4))
    1.62  		for i in 238 410 490 ; do
    1.63  			ddq if=/dev/urandom count=16 bs=1 conv=notrunc \
    1.64  			    of=$iso seek=$((0x$i))
    1.65  		done
    1.66 +		store32 $((0x258)) $(crc32 0x400 $((128*$(read32 0 $((0x250))))))
    1.67 +		store32 $((0x210)) $(crc32 0x200 $(read32 0 $((0x20C))))
    1.68  	fi
    1.69  }
    1.70  
    1.71 @@ -241,10 +245,12 @@
    1.72  	abort "invalid boot catalog."
    1.73  efi_ofs=
    1.74  if [ $(read8 $cat 65) -eq 239 ]; then
    1.75 -	[ -n "$entry" ] && echo "$iso: efi boot ignore --entry $entry" && entry=
    1.76 +	[ ${entry:-1} != 1 ] && echo "$iso: efi boot ignore --entry $entry"
    1.77 +	entry=1
    1.78  	partype=0
    1.79 -	efi_len=$(read16 $cat 102)
    1.80  	efi_ofs=$((4*$(read32 $cat 104)))
    1.81 +	efi_len=$(($(read16 $(($efi_ofs/4)) 19)))
    1.82 +	[ $efi_len -eq 0 ] && efi_len=$(($(read32 $(($efi_ofs/4)) 32)))
    1.83  fi
    1.84  lba=$(read32 $cat 40)
    1.85  [ $(read32 $lba 64) -eq 1886961915 ] ||