fix-pintos-script-geometry.patch (applied cleanly)
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 12 Dec 2008 05:06:43 +0000 (21:06 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 12 Dec 2008 05:06:43 +0000 (21:06 -0800)
src/utils/Pintos.pm
src/utils/pintos
src/utils/pintos-mkdisk

index 70df40d2309d234bd989667aa0f11647ba696969..9e722326d25a819aa1b705ef8fd53f5b3d37ce2f 100644 (file)
@@ -148,7 +148,9 @@ sub set_align {
 sub assemble_disk {
     my (%args) = @_;
 
-    my (%geometry) = $args{GEOMETRY} || (H => 16, S => 63);
+    my (%geometry) = %{$args{GEOMETRY}};
+    $geometry{H} = 16 if !defined $geometry{H};
+    $geometry{S} = 63 if !defined $geometry{S};
 
     my ($align);       # Align partition start, end to cylinder boundary?
     my ($pad);         # Pad end of disk out to cylinder boundary?
@@ -258,6 +260,7 @@ sub make_partition_table {
        $table .= pack ("V", $p->{SECTORS});          # Length in sectors
        die if length ($table) % 16;
     }
+    $table = "\0" x 16 . $table while length ($table) < 64;
     return pack ("a64", $table);
 }
 
index 130e6fe3df4fba84d9b821da56372b0579fed60b..a8f76b33d1cff6fac30620d5810c4cc618e7624f 100755 (executable)
@@ -327,7 +327,7 @@ sub find_disks {
     $disk{DISK} = $make_disk;
     $disk{HANDLE} = $handle;
     $disk{ALIGN} = $align;
-    $disk{GEOMETRY} = %geometry;
+    $disk{GEOMETRY} = \%geometry;
     $disk{FORMAT} = 'partitioned';
     $disk{LOADER} = read_loader ($loader_fn);
     $disk{ARGS} = \@args;
index 87b1563e69c517070e81ad32c36adfabdf6df2a5..4bbd1a6881468d0e2db94fc0ce8b7dbacb51e1fa 100755 (executable)
@@ -91,7 +91,7 @@ my (%disk) = %parts;
 $disk{DISK} = $disk_fn;
 $disk{HANDLE} = $disk_handle;
 $disk{ALIGN} = $align;
-$disk{GEOMETRY} = %geometry;
+$disk{GEOMETRY} = \%geometry;
 $disk{FORMAT} = $format;
 $disk{LOADER} = $loader;
 $disk{ARGS} = \@kernel_args;