isohybrid: preserve MBR id in isohybrid
authorPascal Terjan <pterjan@mandriva.com>
Fri, 24 Apr 2009 17:00:05 +0000 (19:00 +0200)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 1 May 2009 18:02:05 +0000 (11:02 -0700)
When running isohybrid again it's nice to preserve the MBR id

There was some partial code to support setting the id using non
existing to_int, but no way to use it.

Signed-off-by: Pascal Terjan <pterjan@mandriva.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
utils/isohybrid.in

index e98c59f..83f9dc0 100644 (file)
@@ -100,6 +100,13 @@ if ($c > 1024) {
     $cc = $c;
 }
 
+# Preserve id when run again
+seek(FILE, 440, SEEK_SET) or die "$0: $file: $!\n";
+read(FILE, $id, 4);
+if ($id eq "\x00\x00\x00\x00") {
+    $id = pack("V", get_random());
+}
+
 # Print the MBR and partition table
 seek(FILE, 0, SEEK_SET) or die "$0: $file: $!\n";
 
@@ -117,12 +124,7 @@ if ( length($mbr) > 432 ) {
 $mbr .= "\0" x (432 - length($mbr));
 
 $mbr .= pack("VV", $de_lba*4, 0); # Offset 432: LBA of isolinux.bin
-if (defined($id)) {
-    $id = to_int($id);
-} else {
-    $id = get_random();
-}
-$mbr .= pack("V", $id);                # Offset 440: MBR ID
+$mbr .= $id;                           # Offset 440: MBR ID
 $mbr .= "\0\0";                        # Offset 446: actual partition table
 
 # Print partition table