cmd.c:

x86* maxhead should be 255, not 256

make geom less useless by using disklabel for cyl, if available

part.c:

x86* maxhead should be 254, not 255 (other arches?)

maxcyl gets set to 1023 before this function gets called, so it's a
redundant check

Index: src/sbin/fdisk/cmd.c
===================================================================
RCS file: /cvs/src/sbin/fdisk/cmd.c,v
retrieving revision 1.45
diff -p -u -r1.45 cmd.c
--- src/sbin/fdisk/cmd.c        2 Jul 2010 02:54:09 -0000       1.45
+++ src/sbin/fdisk/cmd.c        4 Jul 2011 20:55:22 -0000
@@ -67,9 +67,10 @@ Xreinit(cmd_t *cmd, disk_t *disk, mbr_t 
 int
 Xdisk(cmd_t *cmd, disk_t *disk, mbr_t *mbr, mbr_t *tt, int offset)
 {
-       int maxcyl  = 1024;
-       int maxhead = 256;
-       int maxsec  = 63;
+       u_int32_t maxcyl  = 1024;
+       u_int32_t maxhead = 255;
+       u_int32_t maxsec  = 63;
+       u_int32_t dmaxcyl = 0;
 
        /* Print out disk info */
        DISK_printmetrics(disk, cmd->args);
@@ -80,8 +81,15 @@ Xdisk(cmd_t *cmd, disk_t *disk, mbr_t *m
        maxsec  = 9999999;
 #endif
 
+       if (disk->label)
+               dmaxcyl = disk->label->cylinders;
+
        /* Ask for new info */
        if (ask_yn("Change disk geometry?")) {
+               if (dmaxcyl > maxcyl) {
+                       printf("Warning setting cyl beyond %u forces LBA\n", 
maxcyl);
+                       maxcyl = dmaxcyl;
+               }
                disk->real->cylinders = ask_num("BIOS Cylinders", ASK_DEC,
                    disk->real->cylinders, 1, maxcyl, NULL);
                disk->real->heads = ask_num("BIOS Heads", ASK_DEC,
Index: src/sbin/fdisk/part.c
===================================================================
RCS file: /cvs/src/sbin/fdisk/part.c,v
retrieving revision 1.50
diff -p -u -r1.50 part.c
--- src/sbin/fdisk/part.c       29 Apr 2009 22:58:24 -0000      1.50
+++ src/sbin/fdisk/part.c       4 Jul 2011 20:38:24 -0000
@@ -212,12 +212,10 @@ PRT_parse(disk_t *disk, void *prt, off_t
 int
 PRT_check_chs(prt_t *partn)
 {
-       if ( (partn->shead > 255) ||
+       if ( (partn->shead > 254) ||
                (partn->ssect >63) ||
-               (partn->scyl > 1023) ||
-               (partn->ehead >255) ||
-               (partn->esect >63) ||
-               (partn->ecyl > 1023) )
+               (partn->ehead >254) ||
+               (partn->esect >63) )
        {
                return 0;
        }

Reply via email to