svn commit: r258686 - head/sbin/fdisk
Juli Mallett
jmallett at FreeBSD.org
Wed Nov 27 17:59:14 UTC 2013
Author: jmallett
Date: Wed Nov 27 17:59:13 2013
New Revision: 258686
URL: http://svnweb.freebsd.org/changeset/base/258686
Log:
Fix fdisk(8) to create 2TB partitions on disks larger than 2TB, rather than
only being able to create 1TB partitions:
o) Use an unsigned 32-bit quantity to store the number of disk sectors.
o) Detect overflow of said 32-bit quantity and clamp to 2^32.
o) Rather than returning the disk sector count from get_params, return 0 on
success, since its return value is only ever compared to -1 to detect
failure. This would cause returning 2^32 sectors to be interpreted as an
error.
Reviewed by: bde ("good for a quick fix")
Modified:
head/sbin/fdisk/fdisk.c
Modified: head/sbin/fdisk/fdisk.c
==============================================================================
--- head/sbin/fdisk/fdisk.c Wed Nov 27 16:08:33 2013 (r258685)
+++ head/sbin/fdisk/fdisk.c Wed Nov 27 17:59:13 2013 (r258686)
@@ -75,7 +75,8 @@ static int secsize = 0; /* the sensed s
static char *disk;
-static int cyls, sectors, heads, cylsecs, disksecs;
+static int cyls, sectors, heads, cylsecs;
+static u_int32_t disksecs;
struct mboot {
unsigned char *bootinst; /* boot code */
@@ -873,10 +874,13 @@ get_params()
o = g_mediasize(fd);
if (o < 0)
return (-1);
- disksecs = o / u;
+ if (o / u <= NO_DISK_SECTORS)
+ disksecs = o / u;
+ else
+ disksecs = NO_DISK_SECTORS;
cyls = dos_cyls = o / (u * dos_heads * dos_sectors);
- return (disksecs);
+ return (0);
}
static int
More information about the svn-src-head
mailing list