On Mon, Jul 04, 2011 at 02:26:42PM -0700, andre...@zoho.com wrote:
> cmd.c:
> 
> x86* maxhead should be 255, not 256
> 
> make geom less useless by using disklabel for cyl, if available

geom is useless, period. Making it easier will only encourage people
to use it.

> 
> part.c:
> 
> x86* maxhead should be 254, not 255 (other arches?)

But 6 lines ago you say maxhead should be 255 not 256? Perhaps you can
provide the valid ranges for all of these and your references for
the claim. An example on how you manage to cause yourself a problem
would also be helpful.

> 
> 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;

What's the point of u_int32_t?

>  
>       /* 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;
> +             }
>

Since ask_num won't permit numbers > max, how will LBA be forced?

>               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;
>       }
> 

.... Ken

Reply via email to