diff options
Diffstat (limited to 'sbin/fdisk/fdisk.c')
-rw-r--r-- | sbin/fdisk/fdisk.c | 177 |
1 files changed, 78 insertions, 99 deletions
diff --git a/sbin/fdisk/fdisk.c b/sbin/fdisk/fdisk.c index c8b1a82..a4e3c1f 100644 --- a/sbin/fdisk/fdisk.c +++ b/sbin/fdisk/fdisk.c @@ -24,14 +24,20 @@ * the rights to redistribute these changes. */ -#include <sys/types.h> +#ifndef lint +static const char rcsid[] = + "$Id$"; +#endif /* not lint */ + #include <sys/disklabel.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> #include <sys/stat.h> -#include <sys/ioctl.h> +#include <ctype.h> #include <fcntl.h> +#include <err.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> #include <unistd.h> int iotest; @@ -64,15 +70,13 @@ const char *disks[] = "/dev/rwd0", "/dev/rsd0", "/dev/rod0", 0 }; -char *name; - struct disklabel disklabel; /* disk parameters */ int cyls, sectors, heads, cylsecs, disksecs; struct mboot { - unsigned char padding[2]; /* force the longs to be long alligned */ + unsigned char padding[2]; /* force the longs to be long aligned */ unsigned char bootinst[DOSPARTOFF]; struct dos_partition parts[4]; unsigned short int signature; @@ -228,6 +232,7 @@ static int decimal(char *str, int *num, int deflt); static char *get_type(int type); static int read_config(char *config_file); static void reset_boot(void); +static void usage(void); #if 0 static int hex(char *str, int *num, int deflt); static int string(char *str, char **ans); @@ -239,11 +244,6 @@ main(int argc, char *argv[]) { int i; - name = *argv; - {register char *cp = name; - while (*cp) if (*cp++ == '/') name = cp; - } - for ( argv++ ; --argc ; argv++ ) { register char *token = *argv; if (*token++ != '-' || !*token) break; @@ -274,9 +274,7 @@ main(int argc, char *argv[]) else { if (argc == 1) - { - goto usage; - } + usage(); --argc; f_flag = *++argv; } @@ -297,7 +295,7 @@ main(int argc, char *argv[]) v_flag = 1; break; default: - goto usage; + usage(); } } } @@ -316,11 +314,7 @@ main(int argc, char *argv[]) } if (open_disk(u_flag) < 0) - { - fprintf(stderr, "Cannot open disk %s (%s)\n", - disk, sys_errlist[errno]); - exit(1); - } + err(1, "cannot open disk %s", disk); } else { @@ -333,11 +327,7 @@ main(int argc, char *argv[]) if(rv != -2) break; } if(rv < 0) - { - fprintf(stderr, "Cannot open any disk (%s)\n", - sys_errlist[errno]); - exit(1); - } + err(1, "cannot open any disk"); } printf("******* Working on device %s *******\n",disk); @@ -408,10 +398,14 @@ main(int argc, char *argv[]) } exit(0); +} -usage: - printf("fdisk {-a|-i|-u} [-f <config file> [-t] [-v]] [-{1,2,3,4}] [disk]\n"); - return(1); +static void +usage() +{ + fprintf(stderr, + "usage: fdisk {-a|-i|-u} [-f <config file> [-t] [-v]] [-{1,2,3,4}] [disk]\n"); + exit(1); } static void @@ -648,22 +642,19 @@ open_disk(int u_flag) struct stat st; if (stat(disk, &st) == -1) { - fprintf(stderr, "%s: Can't get file status of %s\n", - name, disk); + warnx("can't get file status of %s", disk); return -1; } if ( !(st.st_mode & S_IFCHR) ) - fprintf(stderr,"%s: Device %s is not character special\n", - name, disk); + warnx("device %s is not character special", disk); if ((fd = open(disk, a_flag || u_flag ? O_RDWR : O_RDONLY)) == -1) { if(errno == ENXIO) return -2; - fprintf(stderr,"%s: Can't open device %s\n", name, disk); + warnx("can't open device %s", disk); return -1; } if (get_params(0) == -1) { - fprintf(stderr, "%s: Can't get disk parameters on %s\n", - name, disk); + warnx("can't get disk parameters on %s", disk); return -1; } return fd; @@ -702,9 +693,7 @@ get_params() { if (ioctl(fd, DIOCGDINFO, &disklabel) == -1) { - fprintf(stderr, - "%s: Can't get disk parameters on %s; supplying dummy ones\n", - name, disk); + warnx("can't get disk parameters on %s; supplying dummy ones", disk); dos_cyls = cyls = 1; dos_heads = heads = 1; dos_sectors = sectors = 1; @@ -727,12 +716,11 @@ static int read_s0() { if (read_disk(0, (char *) mboot.bootinst) == -1) { - fprintf(stderr, "%s: Can't read fdisk partition table\n", name); + warnx("can't read fdisk partition table"); return -1; } if (mboot.signature != BOOT_MAGIC) { - fprintf(stderr, "%s: Invalid fdisk partition table found\n", - name); + warnx("invalid fdisk partition table found"); /* So should we initialize things */ return -1; } @@ -756,11 +744,10 @@ write_s0() flag = 1; #ifdef NOT_NOW if (ioctl(fd, DIOCWLABEL, &flag) < 0) - perror("ioctl DIOCWLABEL"); + warn("ioctl DIOCWLABEL"); #endif if (write_disk(0, (char *) mboot.bootinst) == -1) { - fprintf(stderr, "%s: Can't write fdisk partition table\n", - name); + warnx("can't write fdisk partition table"); return -1; flag = 0; #ifdef NOT_NOW @@ -979,18 +966,17 @@ process_geometry(command) geom_processed = 1; if (part_processed) { - fprintf(stderr, - "%s: ERROR line %d: the geometry specification line must occur before\n\ - all partition specifications.\n", - name, current_line_number); + warnx( + "ERROR line %d: the geometry specification line must occur before\n\ + all partition specifications", + current_line_number); status = 0; break; } if (command->n_args != 3) { - fprintf(stderr, - "%s: ERROR line %d: incorrect number of geometry args\n", - name, current_line_number); + warnx("ERROR line %d: incorrect number of geometry args", + current_line_number); status = 0; break; } @@ -1011,9 +997,9 @@ process_geometry(command) dos_sectors = command->args[i].arg_val; break; default: - fprintf(stderr, - "%s: ERROR line %d: unknown geometry arg type: '%c' (0x%02x)\n", - name, current_line_number, command->args[i].argtype, + warnx( + "ERROR line %d: unknown geometry arg type: '%c' (0x%02x)", + current_line_number, command->args[i].argtype, command->args[i].argtype); status = 0; break; @@ -1031,46 +1017,42 @@ process_geometry(command) */ if (dos_cyls < 0) { - fprintf(stderr, - "%s: ERROR line %d: number of cylinders not specified\n", - name, current_line_number); + warnx("ERROR line %d: number of cylinders not specified", + current_line_number); status = 0; } if (dos_cyls == 0 || dos_cyls > 1024) { - fprintf(stderr, - "%s: WARNING line %d: number of cylinders (%d) may be out-of-range\n\ + warnx( + "WARNING line %d: number of cylinders (%d) may be out-of-range\n\ (must be within 1-1024 for normal BIOS operation, unless the entire disk\n\ - is dedicated to FreeBSD).\n", - name, current_line_number, dos_cyls); + is dedicated to FreeBSD)", + current_line_number, dos_cyls); } if (dos_heads < 0) { - fprintf(stderr, - "%s: ERROR line %d: number of heads not specified\n", - name, current_line_number); + warnx("ERROR line %d: number of heads not specified", + current_line_number); status = 0; } else if (dos_heads < 1 || dos_heads > 256) { - fprintf(stderr, - "%s: ERROR line %d: number of heads must be within (1-256)\n", - name, current_line_number); + warnx("ERROR line %d: number of heads must be within (1-256)", + current_line_number); status = 0; } if (dos_sectors < 0) { - fprintf(stderr, "%s: ERROR line %d: number of sectors not specified\n", - name, current_line_number); + warnx("ERROR line %d: number of sectors not specified", + current_line_number); status = 0; } else if (dos_sectors < 1 || dos_sectors > 63) { - fprintf(stderr, - "%s: ERROR line %d: number of sectors must be within (1-63)\n", - name, current_line_number); + warnx("ERROR line %d: number of sectors must be within (1-63)", + current_line_number); status = 0; } @@ -1093,16 +1075,15 @@ process_partition(command) part_processed = 1; if (command->n_args != 4) { - fprintf(stderr, - "%s: ERROR line %d: incorrect number of partition args\n", - name, current_line_number); + warnx("ERROR line %d: incorrect number of partition args", + current_line_number); break; } partition = command->args[0].arg_val; if (partition < 1 || partition > 4) { - fprintf(stderr, "%s: ERROR line %d: invalid partition number %d\n", - name, current_line_number, partition); + warnx("ERROR line %d: invalid partition number %d", + current_line_number, partition); break; } partp = ((struct dos_partition *) &mboot.parts) + partition - 1; @@ -1137,16 +1118,16 @@ process_partition(command) /* * Can't go past end of partition */ - fprintf(stderr, - "%s: ERROR line %d: unable to adjust start of partition %d to fall on\n\ - a cylinder boundary.\n", - name, current_line_number, partition); + warnx( + "ERROR line %d: unable to adjust start of partition %d to fall on\n\ + a cylinder boundary", + current_line_number, partition); break; } - fprintf(stderr, - "%s: WARNING: adjusting start offset of partition '%d' from %lu\n\ - to %lu, to round to an head boundary.\n", - name, partition, (u_long)partp->dp_start, adj_size); + warnx( + "WARNING: adjusting start offset of partition '%d' from %lu\n\ + to %lu, to round to an head boundary", + partition, (u_long)partp->dp_start, adj_size); partp->dp_start = adj_size; } @@ -1159,10 +1140,10 @@ process_partition(command) adj_size = chunks - partp->dp_start; if (adj_size != partp->dp_size) { - fprintf(stderr, - "%s: WARNING: adjusting size of partition '%d' from %lu to %lu,\n\ - to round to a cylinder boundary.\n", - name, partition, (u_long)partp->dp_size, adj_size); + warnx( + "WARNING: adjusting size of partition '%d' from %lu to %lu,\n\ + to round to a cylinder boundary", + partition, (u_long)partp->dp_size, adj_size); if (chunks > 0) { partp->dp_size = adj_size; @@ -1174,9 +1155,8 @@ process_partition(command) } if (partp->dp_size < 1) { - fprintf(stderr, - "%s: ERROR line %d: size for partition '%d' is zero.\n", - name, current_line_number, partition); + warnx("ERROR line %d: size for partition '%d' is zero", + current_line_number, partition); break; } @@ -1203,17 +1183,16 @@ process_active(command) active_processed = 1; if (command->n_args != 1) { - fprintf(stderr, - "%s: ERROR line %d: incorrect number of active args\n", - name, current_line_number); + warnx("ERROR line %d: incorrect number of active args", + current_line_number); status = 0; break; } partition = command->args[0].arg_val; if (partition < 1 || partition > 4) { - fprintf(stderr, "%s: ERROR line %d: invalid partition number %d\n", - name, current_line_number, partition); + warnx("ERROR line %d: invalid partition number %d", + current_line_number, partition); break; } /* |