Favor BIOS geometry over physical. This should fix MANY problems with
authorkjell <kjell@openbsd.org>
Tue, 18 Apr 2000 22:40:15 +0000 (22:40 +0000)
committerkjell <kjell@openbsd.org>
Tue, 18 Apr 2000 22:40:15 +0000 (22:40 +0000)
hard drives >8G sharing partitions with other operating systems.
Also, support extended partition type 0x0F, which is quite common now.

sbin/fdisk/cmd.c
sbin/fdisk/disk.c

index 418b652..ad799fe 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: cmd.c,v 1.24 2000/02/04 18:09:36 kjell Exp $  */
+/*     $OpenBSD: cmd.c,v 1.25 2000/04/18 22:40:15 kjell Exp $  */
 
 /*
  * Copyright (c) 1997 Tobias Weingartner
@@ -213,7 +213,8 @@ Xselect(cmd, disk, mbr, tt, offset)
        off = mbr->part[pn].bs;
 
        /* Sanity checks */
-       if (mbr->part[pn].id != DOSPTYP_EXTEND) {
+       if ((mbr->part[pn].id != DOSPTYP_EXTEND) &&
+           (mbr->part[pn].id != DOSPTYP_EXTENDL)) {
                printf("Partition %d is not an extended partition.\n", pn);
                return (CMD_CONT);
        }
index 9dccf8f..08da022 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: disk.c,v 1.10 2000/01/08 04:51:16 deraadt Exp $       */
+/*     $OpenBSD: disk.c,v 1.11 2000/04/18 22:40:15 kjell Exp $ */
 
 /*
  * Copyright (c) 1997 Tobias Weingartner
@@ -195,6 +195,13 @@ DISK_getmetrics(disk, user)
                return (0);
        }
 
+       /* If we have BIOS geometry, use that */
+       if (disk->bios) {
+               disk->real = disk->bios;
+               return (0);
+       }
+
+
        /* If we have a label, use that */
        if (!disk->real && disk->label)
                disk->real = disk->label;
@@ -203,18 +210,6 @@ DISK_getmetrics(disk, user)
        if (disk->real == NULL)
                return (1);
 
-       /* If we have a bios, use that (if label looks bogus)
-        *
-        * XXX - This needs to be fixed!!!!
-        * Currently machdep.bios.biosdev is USELESS
-        * It needs to be, at least, a BSD device.
-        * Or we need a mapping from biosdev -> BSD universe.
-        */
-       if (disk->bios)
-               if (disk->real->cylinders > 262144 || disk->real->heads > 256 ||
-                   disk->real->sectors > 63)
-                       disk->real = disk->bios;
-
        return (0);
 }