How about using the same scheme that disklabel uses..
a "*" means 'rest of device'.


On Mon, 3 Mar 2003, Brooks Davis wrote:

> I've made some trivial changes to fdisk's config file parsing code to
> allow the user to specify -1 as the length of a slice to force it to run
> to the end of the disk.  This allows you to create a set of fixed sized
> slices and then one that fills the disk without having to worry about
> the actual size of the disk.  The actual code is almost exactly the same
> as the code for -I.
> 
> As noted in the addition to the manpage, no check is performed to insure
> that the hog slice is actually the last slice on the disk.  This is done
> because 1) fdisk isn't really set up to allow for that kind of checking
> and 2) my partition tables already have overlaping partitions due to
> using fake partitions for disk versioning.
> 
> I'd like to commit this soon with the intent to MFC it after 4.8.
> 
> Comments, objections, etc?
> 
> Thanks,
> Brooks
> 
> Index: fdisk.8
> ===================================================================
> RCS file: /usr/cvs/src/sbin/fdisk/fdisk.8,v
> retrieving revision 1.34
> diff -u -p -r1.34 fdisk.8
> --- fdisk.8   21 Aug 2002 18:10:07 -0000      1.34
> +++ fdisk.8   27 Feb 2003 23:54:36 -0000
> @@ -364,6 +364,11 @@ starting at sector
>  for
>  .Ar length
>  sectors.
> +If
> +.Ar length
> +is -1, the slice will extend to the end of the disk.
> +No checks are performed to insure the slice is actually the last slice
> +on the disk.
>  .Pp
>  Only those slices explicitly mentioned by these lines are modified;
>  any slice not referenced by a
> Index: fdisk.c
> ===================================================================
> RCS file: /usr/cvs/src/sbin/fdisk/fdisk.c,v
> retrieving revision 1.68
> diff -u -p -r1.68 fdisk.c
> --- fdisk.c   30 Dec 2002 21:18:04 -0000      1.68
> +++ fdisk.c   28 Feb 2003 01:37:58 -0000
> @@ -947,7 +947,7 @@ parse_config_line(char *line, CMD *comma
>               break;          /* found comment */
>           if (isalpha(*cp))
>               command->args[command->n_args].argtype = *cp++;
> -         if (!isdigit(*cp))
> +         if (!isdigit(*cp) && *cp != '-')
>               break;          /* assume end of line */
>           end = NULL;
>           command->args[command->n_args].arg_val = strtol(cp, &end, 0);
> @@ -1077,7 +1077,16 @@ process_partition(CMD *command)
>       bzero((char *)partp, sizeof (struct dos_partition));
>       partp->dp_typ = command->args[1].arg_val;
>       partp->dp_start = command->args[2].arg_val;
> -     partp->dp_size = command->args[3].arg_val;
> +     /*
> +      * If the user passed -1 as the length, assume they wanted to
> +      * fill the disk to the end with this partition.
> +      */
> +     if (command->args[3].arg_val == -1) {
> +             partp->dp_size = ((disksecs - partp->dp_start) / dos_cylsecs) * 
> +                 dos_cylsecs - dos_sectors;
> +     } else {
> +             partp->dp_size = command->args[3].arg_val;
> +     }
>       max_end = partp->dp_start + partp->dp_size;
>  
>               if (partp->dp_typ == 0) {
> 
> -- 
> Any statement of the form "X is the one, true Y" is FALSE.
> PGP fingerprint 655D 519C 26A7 82E7 2529  9BF0 5D8E 8BE9 F238 1AD4
> 


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to