wok rev 19027

syslinux/iso2exe: update partition size
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Apr 03 10:27:26 2016 +0200 (2016-04-03)
parents 7d5aee943f85
children bb2e9d803029
files syslinux/stuff/iso2exe/iso2exe.c syslinux/stuff/iso2exe/iso2exe.sh
line diff
     1.1 --- a/syslinux/stuff/iso2exe/iso2exe.c	Sun Apr 03 03:59:59 2016 +0300
     1.2 +++ b/syslinux/stuff/iso2exe/iso2exe.c	Sun Apr 03 10:27:26 2016 +0200
     1.3 @@ -453,6 +453,13 @@
     1.4  			}
     1.5  			write(fd, string, 32);
     1.6  		}
     1.7 +
     1.8 +		/* Update partition size */
     1.9 +		n = 1+((n - 1) >> 20);
    1.10 +		BYTE(bootiso + partition + 7) = 
    1.11 +		BYTE(bootiso + isohybrid + partition + 7) = n -1;
    1.12 +		LONG(bootiso + partition + 12) =
    1.13 +		LONG(bootiso + isohybrid + partition + 12) = n * 2048;
    1.14  	}
    1.15  
    1.16  	/* Install iso2exe boot sector */
     2.1 --- a/syslinux/stuff/iso2exe/iso2exe.sh	Sun Apr 03 03:59:59 2016 +0300
     2.2 +++ b/syslinux/stuff/iso2exe/iso2exe.sh	Sun Apr 03 10:27:26 2016 +0200
     2.3 @@ -473,15 +473,6 @@
     2.4  			md5sum | cut -c-32 | sed 's/\(..\)/\\x\1/g')" | \
     2.5  			ddq bs=16 seek=2047 conv=notrunc of=$1
     2.6  	fi
     2.7 -	echo -n "Adding boot checksum..."
     2.8 -	if [ $(stat -c %s $1) -gt 32768 ]; then
     2.9 -		n=$(($(get 2 $1) - 1 + ($(get 4 $1) - 1)*512))
    2.10 -		n=$(($(od -v -N $n -t u2 -w2 -An $1 | \
    2.11 -		       awk '{ i+= $0 } END { print (i % 65536) }') \
    2.12 -		     + $(get $(($n+1)) $1 1)))
    2.13 -		store 18 $(( (-$n -1) % 65536 )) $1
    2.14 -	fi
    2.15 -	echo " done."
    2.16  	if [ "$append$initrd" ]; then
    2.17  		echo -n "Adding custom config... "
    2.18  		DATA=/tmp/$(basename $0)$$
    2.19 @@ -492,14 +483,33 @@
    2.20  			cat $initrd >> $DATA
    2.21  		echo "#!boot $(md5sum $DATA | sed 's/ .*//')" | cat - $DATA | \
    2.22  		ddq bs=2k seek=$(custom_config_sector $1) of=$1 conv=notrunc
    2.23 -		if [ $(stat -c %s $1) -gt $isosz ]; then
    2.24 -			echo "$(($(stat -c %s $1) - $isosz)) extra bytes."
    2.25 +		newsz=$(stat -c %s $1)
    2.26 +		for i in 1 2 3 4 ; do
    2.27 +			[ $(get $((0x1BE+16*i)) $1 4) -eq $((0x00010080)) ] || continue
    2.28 +			mb=$(((($newsz -1)/1024/1024)+1))
    2.29 +			h=$((512*$(get 417 "$1" 1)))
    2.30 +			store $(($mb-1)) $((0x1C5+16*i)) $1 8
    2.31 +			store $(($mb-1)) $(($h+0x1C5+16*i)) $1 8
    2.32 +			store $(($mb*2048)) $((0x1D2+16*i)) $1 32
    2.33 +			store $(($mb*2048)) $(($h+0x1D2+16*i)) $1 32
    2.34 +		done
    2.35 +		if [ $newsz -gt $isosz ]; then
    2.36 +			echo "$(($newsz - $isosz)) extra bytes."
    2.37  		else
    2.38  			echo "$(($isosz - 32768 - 2048*$(get 32848 $1 4) 
    2.39  				 - $(stat -c %s $DATA) - 24)) bytes free."
    2.40  		fi
    2.41  		rm -f $DATA > /dev/null
    2.42  	fi
    2.43 +	echo -n "Adding boot checksum..."
    2.44 +	if [ $(stat -c %s $1) -gt 32768 ]; then
    2.45 +		n=$(($(get 2 $1) - 1 + ($(get 4 $1) - 1)*512))
    2.46 +		n=$(($(od -v -N $n -t u2 -w2 -An $1 | \
    2.47 +		       awk '{ i+= $0 } END { print (i % 65536) }') \
    2.48 +		     + $(get $(($n+1)) $1 1)))
    2.49 +		store 18 $(( (-$n -1) % 65536 )) $1
    2.50 +	fi
    2.51 +	echo " done."
    2.52  }
    2.53  
    2.54  main "$@" <<EOT